/** * FileName: Main * Author: Jerry * Date: 2020/1/27 20:54 * Description: 完全背包 */ public class Main { /* * @ V 背包容积 * @ N 商品种类 * @ int []value 商品价值 * @ int []weight 商品重量 * */ public static void completePack(int V,int N,int[] weight,int []value) { int [][] dp =new int[N+1][V+1]; int temp; int [] t =new int[N+1]; //初始化动态规划数组 for(int i=1;i<=N;i++) { for(int j=1;j<=V;j++) { if(j>=weight[i]) { int max = j/weight[i]; for(int k=0;k<=max;k++) { temp=Math.max(dp[i-1][j],dp[i-1][j-k*weight[i]]+k*value[i]); if(dp[i][j]<temp) t[i]=k; dp[i][j]=Math.max(dp[i][j],temp); } } else dp[i][j]=dp[i-1][j]; } } int maxValue = dp[N][V]; System.out.println("最大价值为"+maxValue); int j =V; String numStr = ""; for(int i=N;i>=1;i--) { if(dp[i][j]>dp[i-1][j]) { numStr=numStr+"商品种类"+i+"该商品共"+t[i]+"件 "; j=j-weight[i]; } if(j==0) break; } System.out.println(numStr); } public static void main(String[] args) { // TODO Auto-generated method stub int[] weight= {0,1,2,3}; int[] value= {0,6,13,20}; int bagV=15; int N=3; completePack(bagV,N,weight,value); } }