백준
연속합
package bj;
import java.util.*;
public class bj_1912 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] ans = new int[n];
int[] d = new int[n];
//String[] tmp = (scan.nextLine()).split(" ");
int r = -9999;
for(int i = 0; i<n; i++)
{
d[i] = scan.nextInt();
}
ans[0] = d[0];
for(int i = 1; i<n; i++)
{
ans[i] = Math.max(ans[i-1]+d[i], d[i]);
}
for(int i = 0; i<n; i++)
{
r = Math.max(ans[i], r);
}
System.out.println(r);
}
}
한번에 점화식을 세우고 맞은 문제다. 처음에 가장 큰 연속합이라는 말때문에 조금 헤매었는데 예제문제를 거꾸로 풀어보면서 감을 잡았다.
제곱수의 합
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] d = new int[n+1];
for (int i=1; i<=n; i++) {
d[i] = i;
for (int j=1; j*j <= i; j++) {
if (d[i] > d[i-j*j] + 1) {
d[i] = d[i-j*j] + 1;
}
}
}
System.out.println(d[n]);
합분해
int n = scan.nextInt();
int k = scan.nextInt();
double[][] d = new double[k + 1][n + 1];
d[0][0] = 1;
for (int i = 1; i <= k; i++) {
for (int j = 0; j <= n; j++) {
for (int l = 0; l <= j; l++) {
d[k][n] += d[k - 1][j - l];
}
}
}
시간내에 못풀어서 담을 확인한 문제이다.