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 正整数分组相关推荐

  1. 51Nod 1007 正整数分组(01背包)

    将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. ...

  2. 51Nod 1007 正整数分组 | DP (01背包)

    Input示例 5 1 2 3 4 5 Output示例 1 分析:2组的差最小,那么每一组都要接近sum/2,这样就转化成了普通的0 - 1背包了 #include <bits/stdc++. ...

  3. 51 Nod 1007 正整数分组【类01背包】

    1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组, ...

  4. 51nod 1128 正整数分组 V2(二分)

    给出一个长度为N的正整数数组,不改变数组元素的顺序,将这N个数分为K组.各组中元素的和分别为S1,S2....Sk.如何分组,使得S1至Sk中的最大值最小? 例如:1 2 3 4 5 6分为3组,{1 ...

  5. 51nod 正整数分组

    将一堆正整数分为2组,要求2组的和相差最小. 显然我们可以把所有可能组合成的数求出来. 然后从总和的中间开始往大找,找到了就是其中一个的分组,就可以求出答案了. #include<cstdio& ...

  6. - 动规讲解基础讲解八——正整数分组

    将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 整数个数n<=100,所有整数的和<= ...

  7. 正整数分组(51Nod-1007)

    题目 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 输入 第1行:一个数N,N为正整数的数量. ...

  8. 51nod-正整数分组问题(基础方程DP-01背包)

    正整数分组 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 思路: 这题的实质其实也是0-1背包问 ...

  9. 浅谈我对动态规划的一点理解---大家准备好小板凳,我要开始吹牛皮了~~~

    前言 作为一个退役狗跟大家扯这些东西,感觉确实有点...但是,针对网上没有一篇文章能够很详细的把动态规划问题说明的很清楚,我决定还是拿出我的全部家当,来跟大家分享我对动态规划的理解,我会尽可能的把所遇 ...

  10. 动态规划问题思想及算法

    基本思想 若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解. 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问 ...

最新文章

  1. C-Substring的实现
  2. 路由 交换 网桥 相关转贴
  3. [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍
  4. 14款荣耀/华为机型获版本升级: 适配FlyPods Pro骨声纹识别
  5. Vmware 虚拟机远程连接失败解决办法
  6. 3D相机成像原理简介
  7. 无线通信中多径传播包络服从瑞利衰落衰落MATLAB仿真
  8. 浙大计算机学院12月12日毅行,感谢参与lt;2020年秋季浙大飘渺毅行gt;
  9. android 字体外发光,CSS3 霓虹外发光字体效果
  10. html在w3c很多错误,在w3c中验证时发生CSS解析错误
  11. python 因果推断_Causal inference (因果推断)
  12. 以游戏玩家的视角开启设计模式
  13. PostgreSQL SQL 语言:全文搜索
  14. 商标复审成功率是多少?
  15. 史鉴使人明智;诗歌使人巧慧;数学使人精细;博物使人深沉;伦理之学使人庄重;逻辑与修辞使人善辩
  16. Python_oldboy_自动化运维之路_线程,进程,协程(十一)
  17. 中小型研发团队架构实践三要点
  18. 用微信小程序做H5游戏尝试
  19. 深度学习处理遥感影像入门教程
  20. 【8.8】代码源 - 【不降子数组游戏】【最长上升子序列计数(Bonus)】【子串(数据加强版)】

热门文章

  1. 2016.10.9晨记
  2. 视觉SLAM | OKVIS
  3. 圣剑传说 玛娜传奇(Legend of Mana)(LOM)主原料取得方法
  4. android星星闪效果,H5使用canvas实现星星闪烁效果
  5. pwnable.tw-2018-starbound_writeup
  6. 【python】python语法糖
  7. 情境领导者的三体思维
  8. 刘未鹏的博中带的技术博客链接
  9. mysql 三表联查_MySql的join(连接)查询 (三表 left join 写法)
  10. 电脑是怎样执行编程语言的