51NOD1007——整数分组(01背包)
来源:互联网 发布:淘宝数据分析教程 编辑:程序博客网 时间:2024/06/06 16:46
将一堆正整数分为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示例
512345
Output示例
1
其实就是把背包容量视为总和除以2的01背包。
因为要让差值小,就是使得一组的和接近s/2.
#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>using namespace std;const int MAXN =10000+10;const long long INF =1000000007 ;const long long MOD =(1ll<<32);const double EPS=1e-8;const double pi = acos(-1);int a[MAXN];int dp[MAXN];int main(){ int n; scanf("%d",&n); int s=0; for(int i=0;i<n;i++){ scanf("%d",a+i); s+=a[i]; } int m=s/2; for(int i=0;i<n;i++){ for(int v=m;v>=a[i];v--){ dp[v]=max(dp[v],dp[v-a[i]]+a[i]); } } int res=0; printf("%d\n",s-2*dp[m]);}
0 0
- 51NOD1007——整数分组(01背包)
- 51nod1007 正整数分组
- 51nod1007:正整数分组 DP
- 51Nod-正整数分组(01背包)
- 简单背包练习——分组背包
- 51nod 1007 正整数分组 (类01背包问题)
- 51nod 1007 正整数分组(平分) 01背包
- 【51Nod】1007 - 正整数分组(01背包)
- 【51nNod】-1007 正整数分组(01背包)
- 51nod 1007 正整数分组(01背包)
- 51Nod-正整数分组(01背包变形)
- HDU4341——Gold miner(分组背包)
- 背包问题(分组背包)
- 51nod 1007 正整数分组 01背包
- 51Nod 1007 正整数分组 01背包
- 51nod 1007 正整数分组【01背包】
- 51nod 1007 正整数分组(01背包)
- 51nod 1007 正整数分组 01背包
- 图像卷积实现
- 通过串口实现printf和scanf函数
- 将H264码流打包成RTP包
- C#数组
- HDU 5787 数位dp
- 51NOD1007——整数分组(01背包)
- 基于AngularJS+NodeJS+Bootstrap+SpringMVC构建项目(2)
- 多线程(二)线程的创建和启用
- FTP 用户名密码脚本
- Java正则表达式IP地址和邮箱匹配
- POJ 3696 The Luckiest number 欧拉定理+快速幂+GCD *
- 暑期dp46道(35)--HDOJ 2159 FATE 背包问题
- JSP1-生命周期
- Swift之构造器(上)