#include<stdio.h>
#include <stdlib.h>
#define Max(a,b) ((a)>(b)?(a):(b))
int main()
{
int i,j;
int V = 12,N=5;
int f[13]={0};
int w[5]={3,4,5,7,3};
int c[5]={2,4,5,7,3};
//for(i=1;i<13;i++) 这样初始化表示刚好装满
// f[i] = -100;
for(i=0;i<N;i++)
for(j=w[i];j<=V;j++)//表示无限件商品
{
f[j] = Max(f[j],f[j-w[i]]+c[i]);
}
for(j=0;j<=V;j++)
{
printf("%d ",f[j]);
}
printf("\n");
i = N-1;//枚举物品
j = V;//枚举空间
while(i>=0)
{
if (f[j] == f[j - w[i]] + c[i])
{
printf("%d ",i);//逆序输出
j -= w[i];
}
i--;
}
system("pause");
}
#include <stdlib.h>
#define Max(a,b) ((a)>(b)?(a):(b))
int main()
{
int i,j;
int V = 12,N=5;
int f[13]={0};
int w[5]={3,4,5,7,3};
int c[5]={2,4,5,7,3};
//for(i=1;i<13;i++) 这样初始化表示刚好装满
// f[i] = -100;
for(i=0;i<N;i++)
for(j=w[i];j<=V;j++)//表示无限件商品
{
f[j] = Max(f[j],f[j-w[i]]+c[i]);
}
for(j=0;j<=V;j++)
{
printf("%d ",f[j]);
}
printf("\n");
i = N-1;//枚举物品
j = V;//枚举空间
while(i>=0)
{
if (f[j] == f[j - w[i]] + c[i])
{
printf("%d ",i);//逆序输出
j -= w[i];
}
i--;
}
system("pause");
}