import java.util.Scanner; public class Solution{ public static void main(String[] args){ int[] weight=new int[]{0,6,1,5,2,1}; int[] value=new int[]{0,48,7,40,12,8}; int c=8;//背包容量 int[][] dp=new int[6][c+1];//没有初值jvm会帮忙自动初始化,所以我们自己还去初始化就是多此一举 for(int i=1;i<=5;i++){ for(int j=1;j<=c;j++){ if(j>=weight[i]){ dp[i][j]=Math.max(dp[i-1][j],dp[i][j-weight[i]]+value[i]); }else{ dp[i][j]=dp[i-1][j]; } } } System.out.println(dp[5][c]); } }
设函数B(k-1,capacity)为价值,第一个参数前k-1次操作;第k次操作添加物品时候有两种情况,要么进入背包,于是B(k,capacity-weight[i])+value[i],要么不进入背包
B(k,capacity);value不变化,如果大家看不懂建议去b站找视频,搜01背包问题,一个大神讲的非常清楚。
矩阵参考图,右下角是我们需要的值返回即可