假设一个小偷偷珠宝店,拿了一个承重20的背包,求能偷得最大价值
重 价
2 3
3 4
4 5
5 8
9 1
最大价值 23
https://www.bilibili.com/video/av36136952?from=search&seid=11644509251735546077
是这个视频里面人讲的例题,挺好理解的,可以去看看。
#include<stdio.h>
#define N 5
#define M 7
int B[N][M]={0};
int w[5]={0,1,2,3,2};
int v[5]={0,4,6,12,7};
void aaa()
{
int i,j;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
if(w[i]>j)
{
B[i][j]=B[i-1][j];//表示物体太重放不进背包
}
else
{
int v1=B[i-1][j-w[i]]+v[i];//放进去的情况下,
//减去物体的重量,加上物体的价值
int v2=B[i-1][j];//不放进去的情况
if(v1>v2)
B[i][j]=v1;
else
B[i][j]=v2;//选择价值大的
}
}
int main()
{
aaa();
printf("%d\n",B[4][6]);
return 0;
}