01背包看了两三天了,但是一直静不下心来思考,(先抄了边代码)今天认真看了一下
自己想了想,似懂非懂,之后又重新写了下,基本可以写下来,顺便把思路理清。
package 背包问题;
import java.util.Scanner;
public class 零一背包问题2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int V = sc.nextInt();
int v [] = new int [N+1];
int w [] = new int [N+1];
int dp [][]= new int[N+1][V+1];
dp [0][0] = 0;
for(int i=1;i<=N;i++) {
v[i] = sc.nextInt();
w[i] = sc.nextInt();
}
for(int i=1;i<=N;i++) {
for(int j=0;j<=V;j++) {
if(j>=v[i]) // 当 背包容量大于当前物品体积
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-v[i]]+w[i]);
else dp[i][j] = dp[i-1][j];
}
}
int max = 0;
for(int i=1;i<=V;i++) max = Math.max(max,dp[N][i]);
System.out.println(max);
}
}