nyoj - 456 邮票分你一半
2012-03-04 13:25
344 查看
http://acm.nyist.net/JudgeOnline/problem.php?pid=456
题目看上去和上次做的搜索nyoj 325 zb的生日很像,但是再用暴力搜索dfs的结果必然是TLE~~解决这题的模型是01背包问题:先计算所有的邮票值sum,然后sum/2作为容量,每一张邮票的值代表一个物体的体积和价值,这就将问题转化为了经典的01背包问题。
我又用这个思想做了一些zb的生日,结果超时了,又优化了一下才勉强过去,很无语。。。
代码如下:
题目看上去和上次做的搜索nyoj 325 zb的生日很像,但是再用暴力搜索dfs的结果必然是TLE~~解决这题的模型是01背包问题:先计算所有的邮票值sum,然后sum/2作为容量,每一张邮票的值代表一个物体的体积和价值,这就将问题转化为了经典的01背包问题。
我又用这个思想做了一些zb的生日,结果超时了,又优化了一下才勉强过去,很无语。。。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n, sum; int val[1005]; int result[50005]; int main() { int ncases, i, j; scanf("%d", &ncases); while(ncases--) { scanf("%d", &n); sum = 0; for(i = 1; i <= n; i++) { scanf("%d", &val[i]); sum += val[i]; } memset(result, 0, sizeof(result)); for(i = 1; i <= n; i++) { for(j = sum/2; j >= val[i]; j--) { if(result[j] < result[j-val[i]] + val[i]) result[j] = result[j-val[i]] + val[i]; } } printf("%d\n", sum - result[sum/2]*2); } return 0; }
相关文章推荐
- NYOJ 325 zb的生日 && NYOJ 456 邮票分你一半
- nyoj-456-邮票分你一半
- NYOJ 456 邮票分你一半
- nyoj 456 邮票分你一半(母函数)(背包)
- NYOJ 325 zb的生日+NYOJ 456 邮票分你一半
- nyoj 325 zb的生日 & nyoj 456 邮票分你一半
- NYOJ 456 邮票分你一半
- NYOJ 456 邮票分你一半
- NYoj 325&&456 zb的生日&&邮票分你一半[0-1背包变形]
- NYOJ 325 zb的生日+NYOJ 456 邮票分你一半
- NYOJ - 456 - 邮票分你一半(动态规划01背包变形)
- nyoj 456 邮票分你一半(01背包----迷惑人心的bug!!)
- NYOJ 456 邮票分你一半
- NYOJ 456 邮票分你一半(01背包)
- nyoj456 邮票分你一半(01背包)
- nyoj 456 邮票分你一半
- nyoj456邮票分你一半(和nyoj325 zb的生日)(背包)
- 邮票分你一半(nyoj 456)(平分问题)(01背包)
- Nyoj 456 邮票分你一半
- nyoj 456 邮票分你一半