-
C - 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活
- HDU - 2191
- 题目名字是相当的长。还是裸的多重背包注意这里是以钱数为容量,以体积为价值不要弄反即可。
-
#include<bits/stdc++.h> using namespace std; #define maxn 1222 int dp[maxn],sum,n,w; struct node { int v,w,k; } num[maxn]; void zeropack(int C,int W) { for(int i=sum; i>=C; i--) dp[i]=max(dp[i],dp[i-C]+W); } void compack(int C,int W) { for(int i=C; i<=sum; i++) dp[i]=max(dp[i],dp[i-C]+W); } void mult() { memset(dp,0,sizeof(dp)); for(int i=1; i<=n; i++) { if(num[i].k*num[i].v>sum) compack(num[i].v,num[i].w); else { int temp=1; while(temp<num[i].k) { zeropack(temp*num[i].v,temp*num[i].w); num[i].k-=temp; temp<<=1; } zeropack(num[i].k*num[i].v,num[i].k*num[i].w); } } printf("%d\n",dp[sum]); } int main() { int cas=1; scanf("%d",&cas); while(cas--) { scanf("%d%d",&sum,&n); for(int i=1; i<=n; i++)scanf("%d%d%d",&num[i].v,&num[i].w,&num[i].k); mult(); } return 0; }
C - 悼念512汶川大地震遇难同胞 HDU - 2191 -多重背包
最新推荐文章于 2021-09-01 18:16:44 发布
本文详细解析了多重背包问题的算法原理,通过具体实例介绍了如何使用C++实现多重背包算法,包括完全背包和零一背包的处理方法,旨在帮助读者深入理解并掌握多重背包问题的解决技巧。

1024

被折叠的 条评论
为什么被折叠?



