/**
* 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);
}
}