51nod 1007 正整数分组 (类01背包问题)
来源:互联网 发布:网络乞丐伴奏 编辑:程序博客网 时间:2024/05/29 13:27
将一堆正整数分为2组,要求2组的和相差最小。
例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。
这道题就是要求在n个数字里面选出一些数,计算出这些数字的和,然后在计算出剩下数字的和然后求出这两个和的差的最小值,我们可以看出,关键就是怎么样选这些数字。
选数字,这就和01背包有点像了。我们可以先计算出这些数字的总和,然后将背包的容量看成是这个和的一半,然后从这些数字里面选出一些来看这个背包最多能装多少就可以了。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int const maxn = 10005;int dp[maxn];int a[105];int main(){ int n,v,sum ; while(scanf("%d",&n)!=EOF) { sum = 0 ; for(int i = 0 ; i < n ; i++) { scanf("%d",&a[i]); sum+=a[i]; } v=sum/2; memset(dp,0,sizeof(dp)); for(int i = 0 ; i < n ; i++) { for(int j = v ; j >= a[i] ; j--) { dp[j]=max(dp[j],dp[j-a[i]]+a[i]); } } printf("%d\n",sum-2*dp[v]); } return 0;}
0 0
- 51nod 1007 正整数分组 (类01背包问题)
- 51Nod--正整数分组--01背包问题
- 51nod 1007 正整数分组 01背包
- 51Nod 1007 正整数分组 01背包
- 51nod 1007 正整数分组【01背包】
- 51nod 1007 正整数分组(01背包)
- 51nod 1007 正整数分组 01背包
- 51Nod-正整数分组(01背包)
- 51nod 1007 正整数分组(平分) 01背包
- 【51Nod】1007 - 正整数分组(01背包)
- 51nod 1007 正整数分组(01背包)
- 51nod 1007 正整数分组(类背包)
- 51nod-正整数分组问题(基础方程DP-01背包)
- 51nod 1007 正整数分组(背包)
- 51nod 正整数分组 01背包
- 51Nod 1007 正整数分组(01背包的变形)
- 51Nod 1007 正整数分组(01背包变形)
- 51 NOD 1007 正整数分组(0-1背包)
- iOS CAEmitterLayer 实现粒子效果
- Java的单根继承结构--优点
- word-wrap和word-break css3
- 从零开始搭建架构实施Android项目
- iOS制作自己的静态库(即.a文件)
- 51nod 1007 正整数分组 (类01背包问题)
- Git 学习笔记
- git 版本控制和SourceTree的安装使用 eclipse 的egit 插件安装使用
- 1080. Graduate Admission (30)
- SCU 3172-Fisherman(0-1背包)
- hdu1045 Fire Net(dfs水)
- 实战——简易计算器
- javascript & DHTML cookbook摘抄
- LeetCode:Majority Element