import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int t=scanner.nextInt();
while(t-->0) {
int n=scanner.nextInt();
int m=scanner.nextInt();
int w[]=new int[n];//体积
int v[]=new int[n];//价值
for (int i = 0; i < v.length; i++) {
w[i]=scanner.nextInt();
v[i]=scanner.nextInt();
}
int dp[]=new int[m+1];
for (int i = 0; i < n; i++) {
for (int j = w[i]; j <= m; j++) {
dp[j]=Math.max(dp[j], dp[j-w[i]]+v[i]);
}
}
System.out.println(dp[m]);
}
}
}
与01背包很像,主要的区别时01背包遍历dp数组时是逆序,而完全背包是正序,正序使得第i件物品可以多次选择



京公网安备 11010502036488号