【背包/递推】01背包
发布日期:2021-05-07 22:48:04 浏览次数:17 分类:精选文章

本文共 392 字,大约阅读时间需要 1 分钟。

题目

经典啊。。。

输入

第1行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);

第2至N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。

输出

仅一行,一个数,表示最大总价值。

思路

DP

用个数组k表示当空间=j时,最大价值。如果k[j]放得下此物品,比较k[j]和k[j-空间],赋值。
然后输出k[m]。

代码

#include
int m,n,i,j,k[201]={ 0},a,z;int main(){ scanf("%d%d",&m,&n); for(i=1;i<=n;i++){ scanf("%d%d",&a,&z); for(j=m;j>=a;j--) if(k[j-a]+z>k[j]) k[j]=k[j-a]+z; } printf("%d",k[m]);}
上一篇:【DP】传球游戏
下一篇:【DP】糖果盒

发表评论

最新留言

不错!
[***.144.177.141]2025年04月14日 08时38分45秒