01背包算法 笔试时候做过

 
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背包问题,一个大神讲的非常清楚。

矩阵参考图,右下角是我们需要的值返回即可

 

posted @ 2019-09-23 02:14  我爱黑科技77  阅读(113)  评论(0编辑  收藏  举报