您的位置:首页 > 其它

hhu1017 最小差 动态规划dp 01背包

2016-11-18 16:25 239 查看

1017: 最小差

时间限制: 1 Sec 内存限制: 128 MB

提交: 38 解决: 11

[提交][状态][讨论版]

题目描述

假设有n个正整数a1,a2,a3…an,希望将这些数分成两组,使得两组的和差值最小。

输入

第一行输入整数m(0<m<=100),代表测试用例的数量。

接下来每个用例由两行组成,第一行是一个整数n(1<n<=100),表示整数的个数,第二行包含n个正整数,且最大不超过100。

输出

输出最小的差的绝对值。

样例输入

263 2 3 4 2 951 1 1 1 10

样例输出

16

提示

来源

河海ACM前辈-裴正

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 110;
int f[maxn*maxn];
int a[maxn];
int main(){
int i,j,m,n;
scanf("%d",&m);
while(m--){
int ans = 0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
ans += a[i];
}
memset(f, 0, sizeof(f));
for(i=1;i<=n;i++){
for(j=ans/2;j>=a[i];j--){
f[j] = max(f[j-a[i]] + a[i],f[j]);
}
}
cout<<ans-2*f[ans/2]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: