背包容量为10
五个物品
价值:8,10,9,5,5
重量:3,6,5,2,3
#include<stdio.h>
int main()
{
int value[6]={0,8,10,9,5,5};
int weight[6]={0,3,6,5,2,3};
int i,j;
int dp[6][11]={0};
for(i=1;i<6;i++)
{
for(j=1;j<11;j++)
{
if(weight[i] > j)
{
dp[i][j]=dp[i-1][j];
}
else
{
int v1=dp[i-1][j-weight[i]]+value[i];
int v2=dp[i-1][j];
if(v1 > v2)
dp[i][j]=v1;
else
dp[i][j]=v2;
}
}
}
for(i=1;i<6;i++)//打表输出
{
for(j=1;j<11;j++)
{
printf("%3d",dp[i][j]);
}
printf("\n");
}
return 0;
}
一维数组方式
#include<stdio.h>
int main()
{
int value[6]= {0,8,10,9,5,5};
int weight[6]= {0,3,6,5,2,3};
int i,j;
int dp[11]= {0};
for(i=1; i<6; i++)
{
for(j=10; j>0; j--)
{
int v1=dp[j-weight[i]]+value[i];
int v2=dp[j];
if(v1 > v2&&j-weight[i]>=0)
dp[j]=v1;
else
dp[j]=v2;
}
}
for(j=1; j<11; j++)
{
printf("%3d",dp[j]);
}
printf("\n");
return 0;
}