0
点赞
收藏
分享

微信扫一扫

1267:【例9.11】01背包问题

http://ybt.ssoier.cn:8088/problem_show.php?pid=1267

/*
1267:【例9.11】01背包问题
http://ybt.ssoier.cn:8088/problem_show.php?pid=1267

【例1】 0/1背包《信息学奥赛一本通》【解法二】
本问题的数学模型如下:
设 f[v]表示重量不超过v公斤的最大价值,
则f[v]=max{f[v],f[v-w[i]]+c[i]},
当v>=w[i],1<=i<=n 。程序如下:
*/

#include<cstdio>
using namespace std;

const int maxm = 2001, maxn = 31;
int m, n;
int w[maxn], c[maxn];
int f[maxm];
int main()
{
//背包容量m和物品数量n
scanf("%d%d",

//每个物品的重量和价值
for (int i=1; i <= n; i++)
scanf("%d%d",&w[i],

//设f(v)表示重量不超过v公斤的最大价值
for (int i=1; i <= n; i++)
for (int v = m; v >= w[i]; v--)
{
if (f[v-w[i]]+c[i]>f[v])
{
f[v] = f[v-w[i]]+c[i];
}
}

// f(m)为最优解
printf("%d",f[m]);

return 0;
}

 

 

 

 


 

 

 

 

 

举报

相关推荐

0 条评论