51nod 2级算法题-1007
2017-04-25 10:52
232 查看
1007 正整数分组
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 将一堆正整数分为2组,要求2组的和相差最小。 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。
Input
第1行:一个数N,N为正整数的数量。 第2 - N+1行,N个正整数。 (N <= 100, 所有正整数的和 <= 10000)
Output
输出这个最小差
Input示例
5 1 2 3 4 5
Output示例
1
简单01背包dp
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
#include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <queue> #include <stack> using namespace std; const int maxn=10000+100; const int INF=0xfffffff; int a[maxn]; int dp[maxn]; int main (){ int T; cin>>T; int sum=0; for(int i=1;i<=T;i++){ cin>>a[i]; sum+=a[i]; } sort(a+1,a+T+1); memset(dp,0,sizeof(dp)); for(int i=1;i<=T;i++){ for(int j=sum/2;j>=a[i];j--){ dp[j]=max(dp[j],dp[j-a[i]]+a[i]); } } cout<<abs(sum-2*dp[sum/2])<<endl; return 0; }
相关文章推荐
- 51nod 2级算法题-1092
- 51nod 2级算法题-1133
- 51nod 2级算法题-1010
- 51nod 2级算法题-1095
- 51nod 2级算法题-1279
- 51nod 2级算法题-1428
- 【模拟】1432 独木舟【51nod】【难度:2级算法题】
- 51nod 2级算法题-1014
- 51nod 2级算法题-1119
- 51nod 2级算法题-1315
- 51nod 2级算法题-1050
- 51nod 2级算法题-1062
- 【贪心+优先队列】1428 活动安排问题【51nod】【难度:2级算法题】
- 51nod 2级算法题-1126
- 【51nod 算法马拉松19 C】 集合对
- 51Nod 算法马拉松22 代码能力捉急记
- 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
- 51nod 1007 正整数分组
- 51Nod - 1081 子段求和 前缀和算法
- 51nod 1007 背包变形