nyoj 456-邮票分你一半
2013-12-28 22:36
288 查看
http://acm.nyist.net/JudgeOnline/problem.php?pid=456
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张邮票的分值已经知道了,他们已经分好了,你知道最后他们得到的邮票分值和相差多少吗?
输入第一行只有一个整数m(m<=1000),表示测试数据组数。
接下来有一个整数n(n<=1000),表示邮票的张数。
然后有n个整数Vi(Vi<=100),表示第i张邮票的分值。
输出输出差值,每组输出占一行。
样例输入
样例输出
邮票分你一半
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张邮票的分值已经知道了,他们已经分好了,你知道最后他们得到的邮票分值和相差多少吗?
输入第一行只有一个整数m(m<=1000),表示测试数据组数。
接下来有一个整数n(n<=1000),表示邮票的张数。
然后有n个整数Vi(Vi<=100),表示第i张邮票的分值。
输出输出差值,每组输出占一行。
样例输入
2 5 2 6 5 8 9 3 2 1 5
样例输出
0 2
#include<iostream> #include<cstring> using namespace std; int main() { int T; int a[100001], b[100001]; cin >> T; while (T--) { memset (a, 0, sizeof(a)); memset (b, 0, sizeof(b)); int n, sum = 0; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; sum += a[i]; } for (int i = 1; i <= n; i++) { for (int j = sum / 2; j >= a[i]; j--) if (b[j - a[i]] + a[i] > b[j]) b[j] = b[j - a[i]] + a[i]; } cout << sum - 2 * b[sum / 2] << endl; } }
相关文章推荐
- NYOJ 456 邮票分你一半
- nyoj456_邮票分我一半
- (NYoj 325 zb的生日 和 456 邮票分你一半) 两个一样的题目不同的处理方法。(注意看题目中参数的较小值)
- NYOJ_456_邮票分你一半
- NYOJ 456 邮票分你一半(01背包)
- nyoj 456 邮票分你一半 【母函数】【01背包】
- NYOJ456-邮票分你一半
- NYOJ 456 邮票分你一半
- nyoj456邮票分你一半
- nyoj - 456 邮票分你一半
- NYOJ456 邮票分你一半【dp】
- NYOJ-456-邮票分你一半(01背包)
- NYOJ456 邮票分你一半(转化为01背包)
- 邮票分你一半(nyoj_456)
- NYOJ-456 邮票分你一半 AC 分类: NYOJ 2014-01-02 14:33 152人阅读 评论(0) 收藏
- NYOJ-456 邮票分你一半(典型的01背包问题)
- NYOJ-456 邮票分你一半
- nyoj 456 邮票分你一半(01背包)
- NYOJ 456 邮票分你一半(01背包)
- NYOJ 456 邮票分你一半