https://www.acmicpc.net/problem/12865
package baekjoon;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
// 평범한 배낭
public class BJ12865 {
static int n;
static int k;
static int[] weight;
static int[] value;
static int[] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
weight = new int[k + 1];
value = new int[n];
dp = new int[k + 1];
for(int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int w = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
weight[i] = w;
value[i] = v;
for(int j = k; j >= w; j--) {
dp[j] = Math.max(v + dp[j - w], dp[j]);
}
}
System.out.println(dp[k]);
}
}
아이디어
틀렸습니다
행렬 곱셈 순서
구하는 문제처럼 생각해서 dp 점화식을 잘못 세웠다.✔ 3일 후 다시 풀어보았다.
#2293
을 풀어서 해당 문제도 일차원 배열로 구현할 수 있는 것을 캐치하여 더 깔끔하게 풀 수 있었다.3과 6-3
== 3과 3
이 되어서 3을 두 번 담게 된다.