在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W·2……Wn,与之相对应的价值为P1,P2……Pn。求出获得最大价值的方案。
朴素的背包问题,时间复杂度为O(n^2),dp过程类似Floyd算法
#include <stdio.h>
#include <math.h>
#define MAX(a,b) (a)>(b)?(a):(b)
int main(void) {
int weight[10]={1,2,3,4};
int value[10]={10,20,30,50};
int capacity=4;
int dp[10][10]={0};
for(int j=capacity;j>=weight[0];j--)
{
dp[0][j]=dp[0][j-weight[0]]+value[0];
}
for(int i=1;i<4;i++)
{
for(int j=1;j<=capacity;j++)
{
if(j<weight[i])
{
dp[i][j]=dp[i-1][j];
}else {
dp[i][j]=MAX(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);
}
}
}
for(int i=0;i<4;i++)
{for(int j=0;j<5;j++)
printf("%4d",dp[i][j]);
printf("\n");
}
printf("Hello World\n");
return 0;
}