hdu 1171 Big Event in HDU(多重背包转化为01背包)
2014-02-21 20:45
344 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1171
一道破题。。敲了好久,中间换了两种思路。
首先注意输入,不是以-1结束,而是以负数结束。贡献2次Wa。
把多重背包转换为01背包,求出总的价值,以总价值的一半为背包的容量,求出它能装下的最大价值。然后总价值减去该值就是另一个答案。脑卡了,整了两个背包。。
一道破题。。敲了好久,中间换了两种思路。
首先注意输入,不是以-1结束,而是以负数结束。贡献2次Wa。
把多重背包转换为01背包,求出总的价值,以总价值的一半为背包的容量,求出它能装下的最大价值。然后总价值减去该值就是另一个答案。脑卡了,整了两个背包。。
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int dp[150010]; int main() { int n,val,num,sumval,a[5010],cnt; while(~scanf("%d",&n)) { if(n < 0) break; sumval = 0; cnt = 0; for(int i = 1; i <= n; i++) { scanf("%d %d",&val,&num); sumval += val*num; while(num--) a[++cnt] = val; } memset(dp,0,sizeof(dp)); dp[0] = 1; int ans = 0; for(int i = 1; i <= cnt; i++) { for(int v = sumval/2; v >= a[i]; v--) //以总价值一半来背 { if( dp[v-a[i]] == 1) { dp[v] = 1; ans = max(ans,v); } } } printf("%d %d\n",sumval-ans,ans); } return 0; }
相关文章推荐
- HDU 1171 Big Event in HDU (多重背包,可转换为01背包)+对于背包的一点认识 4000
- HDU 1171 Big Event in HDU (多重bool背包) /(01背包)
- HDU1171--Big Event in HDU--01背包,多重背包
- HDU/HDOJ 1171 Big Event in HDU 01背包、多重背包、母函数
- Big Event in HDU(多重背包转化为01背包)
- HDU1171 Big Event in HDU 01背包 母函数 TWT Tokyo Olympic 2COMBO-1 未完待续
- HDU 1171 Big Event in HDU (多重背包)
- HDU 1171 Big Event in HDU(01背包)
- HDU 1171 Big Event in HDU【01背包】
- hdu 1171 Big Event in HDU 背包/动态规划
- HDU 1171 Big Event in HDU(多重背包)
- hdu1171 Big Event in HDU(背包)
- HDU - 1171 Big Event in HDU(母函数、0-1背包)
- hdu 1171 Big Event in HDU(dp 01背包 母函数)
- 【杭电oj】1171 - Big Event in HDU(01背包)
- HDU 1171 Big Event in HDU(01背包)
- HDU-1171 - Big Event in HDU - 01背包
- HDU - 1171 Big Event in HDU(多重背包或BFS)
- HDU 1171 Big Event in HDU(01背包)
- HDU-1171-Big Event in HDU(01背包的简单变形)