动态规划表格之经典算法-01背包
import java.util.Scanner;
public class Main60 {
//动态规划
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//商品个数
int m=sc.nextInt();//背包容量
int []w=new int[n+1];//重量
int []v=new int[n+1];//价格
int [][]tab=new int[m+1][m+1];
for (int i = 1; i <=n; i++) {
w[i]=sc.nextInt();
v[i]=sc.nextInt();
}
//tab首行 首列为0
for (int i = 0; i <=n; i++) {
for (int j = 0; j <=m; j++) {
if (j==0||i==0) {
tab[i][j]=0;
}
}
}
//循环填写表格
//如果商品重量大于此时背包容量,此时最大价值等于上一个格子价值
//如果商品重量小于等于此时背包容量,此时最大价值等于max{上一个格子价值,次商品价值+背包剩余空间在表格中的最大价值}
for (int i = 1; i <=n; i++) {
for (int j = 1; j <=m; j++) {
if (w[i]>j) {
tab[i][j]=tab[i-1][j];
}else {
tab[i][j]=Math.max(tab[i-1][j],v[i]+tab[i-1][j-w[i]]);
}
}
}
System.out.println(tab[n][m]);
}
}