51Nod 1007 正整数分组
1007 正整数分组
将一堆正整数分为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
思路:
一开始想的是,先从大到小排序,类似贪心,分两队,l,r, 每次将元素从大到小,放入当前较小的一堆,估计会错,想到了dp但是没行动,先贪一把试试
伪代码:
for(int i = 0; i < n; i++)
{if(l > r) l+=a[i];else r+=a[i];
}
结果发现 有四五组数据不过,贪错了,后来想想,显然01背包嘛,后改成01背包... 先求总和,再求平均数,以数字大小作为重量和价值,最后求出总重量为平均数是最大价值,与平均数做差后乘2,如果总和为奇数,结果再加一,偶数不加一.
/*************************************************************************> File Name: 1007.cpp> Author: dulun> Mail: dulun@xiyoulinux.org> Created Time: 2016年04月02日 星期六 16时03分41秒************************************************************************/#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define LL long long
using namespace std;const int N = 50086;int a[N];
int dp[N];int main()
{int n;int sum = 0;scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%d", &a[i]);sum += a[i];}int flag = 0;if(sum % 2 == 1) flag = 1;int ave = sum / 2;for(int i = 0; i < n; i++)for(int v = ave; v >= a[i]; v--){dp[v] = max(dp[v-a[i]]+a[i], dp[v]);}printf("%d\n", 2*(ave-dp[ave])+flag);return 0;
}
51Nod 1007 正整数分组相关推荐
- 51Nod 1007 正整数分组(01背包)
将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. ...
- 51Nod 1007 正整数分组 | DP (01背包)
Input示例 5 1 2 3 4 5 Output示例 1 分析:2组的差最小,那么每一组都要接近sum/2,这样就转化成了普通的0 - 1背包了 #include <bits/stdc++. ...
- 51 Nod 1007 正整数分组【类01背包】
1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组, ...
- 51nod 1128 正整数分组 V2(二分)
给出一个长度为N的正整数数组,不改变数组元素的顺序,将这N个数分为K组.各组中元素的和分别为S1,S2....Sk.如何分组,使得S1至Sk中的最大值最小? 例如:1 2 3 4 5 6分为3组,{1 ...
- 51nod 正整数分组
将一堆正整数分为2组,要求2组的和相差最小. 显然我们可以把所有可能组合成的数求出来. 然后从总和的中间开始往大找,找到了就是其中一个的分组,就可以求出答案了. #include<cstdio& ...
- - 动规讲解基础讲解八——正整数分组
将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 整数个数n<=100,所有整数的和<= ...
- 正整数分组(51Nod-1007)
题目 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 输入 第1行:一个数N,N为正整数的数量. ...
- 51nod-正整数分组问题(基础方程DP-01背包)
正整数分组 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 思路: 这题的实质其实也是0-1背包问 ...
- 浅谈我对动态规划的一点理解---大家准备好小板凳,我要开始吹牛皮了~~~
前言 作为一个退役狗跟大家扯这些东西,感觉确实有点...但是,针对网上没有一篇文章能够很详细的把动态规划问题说明的很清楚,我决定还是拿出我的全部家当,来跟大家分享我对动态规划的理解,我会尽可能的把所遇 ...
- 动态规划问题思想及算法
基本思想 若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解. 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问 ...
最新文章
- C-Substring的实现
- 路由 交换 网桥 相关转贴
- [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍
- 14款荣耀/华为机型获版本升级: 适配FlyPods Pro骨声纹识别
- Vmware 虚拟机远程连接失败解决办法
- 3D相机成像原理简介
- 无线通信中多径传播包络服从瑞利衰落衰落MATLAB仿真
- 浙大计算机学院12月12日毅行,感谢参与lt;2020年秋季浙大飘渺毅行gt;
- android 字体外发光,CSS3 霓虹外发光字体效果
- html在w3c很多错误,在w3c中验证时发生CSS解析错误
- python 因果推断_Causal inference (因果推断)
- 以游戏玩家的视角开启设计模式
- PostgreSQL SQL 语言:全文搜索
- 商标复审成功率是多少?
- 史鉴使人明智;诗歌使人巧慧;数学使人精细;博物使人深沉;伦理之学使人庄重;逻辑与修辞使人善辩
- Python_oldboy_自动化运维之路_线程,进程,协程(十一)
- 中小型研发团队架构实践三要点
- 用微信小程序做H5游戏尝试
- 深度学习处理遥感影像入门教程
- 【8.8】代码源 - 【不降子数组游戏】【最长上升子序列计数(Bonus)】【子串(数据加强版)】