xdu1036

maksyuki 发表于 oj 分类,标签:
0

1036: 分配宝藏

题目描述

两个寻宝者找到一个宝藏,里面包含着n件物品,每件物品的价值是w[i]。suma代表寻宝者A所获物品的总价值,sumb代表寻宝者B所获物品的总价值,请问怎么分配,能使得|suma - sumb|(即suma与sumb之差的绝对值)最小。

输入

有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T<=50)。
接下来为T组数据,每组数据分为两行:
第一行有一个整数n, 表示物品个数,其中0<n<=200.
第二行有n个整数,第i个正数w[i]代表第i件物品的价值,其中0<w[i]<=200.
注意:所有数据均为正整数。

输出

一共T行。
对于每组数据,输出一个整数,表示|suma-sumb|。

样例输入

222 341 2 3 4

样例输出

10

提示

来源

2014西电ACM校赛现场赛

 

题目类型:01背包

算法分析:本题要求把总价值分为两个数,使这两个数接近相等,而且这两个数必须由题目中所给的几种物品的价值构成。DP算法,背包问题,求法是先求出总价值sum,再用dp[]求sum / 2最多能放多少价值!即可以求出其中一个数了,另一个就是sum-dp[sum/2]。状态f[i]表示取得容量为j时能获得的最大值。状态转移方程为f[j]=max{f[j], f[j-v[i]]+v[i]}