正整数分组

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

思路:

这题的实质其实也是0-1背包问题,但是要想理解到这一步,或者说想要用0-1背包来解决这个问题,就必须将问题抽象化到一定的程度才可以。

一列数,无序,给他分成两半,要想实现两半的和的差最小,就是恨不得恰好均分了。那么我们按照0-1背包的那种”一维式“的思维来想,这个问题就别转化成了从第一个数开始到最后一个数,选出一些数,使他们的和最大程度的接近所有数的和的一半,将这些数作为一组,那么剩下的数就是另一组了。

按照之前0-1背包的思路,这题就迎刃而解了。


#include <cmath>
#define INF 65535
using namespace std; int n;
int f[];
int sum;
int num[]; int main()
{
int other;
while(~scanf("%d",&n))
{
sum = ;
for(int i = ;i <= n;i++){
scanf("%d",&num[i]);
sum += num[i];
}
memset(f,,sizeof(f));
for(int i = ;i <= n;i++)
for(int j = sum/;j >= num[i];j--)
f[j] = max(f[j],f[j-num[i]]+num[i]);
other = sum - f[sum/];
printf("%d\n",abs(other-f[sum/]));
}
return ;
}

51nod-正整数分组问题(基础方程DP-01背包)的更多相关文章

  1. USACO Money Systems Dp 01背包

    一道经典的Dp..01背包 定义dp[i] 为需要构造的数字为i 的所有方法数 一开始的时候是这么想的 for(i = 1; i <= N; ++i){ for(j = 1; j <= V ...

  2. HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)

    HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解) 题意分析 要先排序,在做01背包,否则不满足无后效性,为什么呢? 等我理解了再补上. 代码总览 #in ...

  3. POJ.3624 Charm Bracelet(DP 01背包)

    POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...

  4. HDOJ(HDU).2546 饭卡(DP 01背包)

    HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...

  5. HDOJ(HDU).2602 Bone Collector (DP 01背包)

    HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...

  6. UVA.10130 SuperSale (DP 01背包)

    UVA.10130 SuperSale (DP 01背包) 题意分析 现在有一家人去超市购物.每个人都有所能携带的重量上限.超市中的每个商品有其相应的价值和重量,并且有规定,每人每种商品最多购买一个. ...

  7. BZOJ 4145: [AMPPZ2014]The Prices( 状压dp + 01背包 )

    我自己只能想出O( n*3^m )的做法....肯定会T O( nm*2^m )做法: dp( x, s ) 表示考虑了前 x 个商店, 已买的东西的集合为s. 考虑转移 : 先假设我们到第x个商店去 ...

  8. - > 动规讲解基础讲解一——01背包(模板)

    作为动态规划的基础,01背包的思想在许多动规问题中会经常出现,so,熟练的掌握01背包的思路是极其重要的: 有n件物品,第i件物品(I = 1,2,3…n)的价值是vi, 重量是wi,我们有一个能承重 ...

  9. poj 2923 状压dp+01背包

    好牛b的思路 题意:一系列物品,用二辆车运送,求运送完所需的最小次数,两辆车必须一起走 解法为状态压缩DP+背包,本题的解题思路是先枚举选择若干个时的状态,总状态量为1<<n,判断这些状态 ...

随机推荐

  1. [Typescript] Introduction to Generics in Typescript

    If Typescript is the first language in which you've encountered generics, the concept can be quite d ...

  2. linux删除或隐藏命令历史记录history

    1.环境变量添加HISTCONTROL = ignorespace 在命令前面插入空格,这条命令会被 shell 忽略,也就意味着它不会出现在历史记录中.但是这种方法有个前提,只有在你的环境变量 HI ...

  3. Asp.net 回车默认按钮

    <head> <script type="text/javascript"> function OnKey()      {          if (ev ...

  4. JAVA File转Byte[]

    /** * 获得指定文件的byte数组 */ public static byte[] getBytes(String filePath){ byte[] buffer = null; try { F ...

  5. memcache如何模糊查询

    是新的方法,还是get方法本身就有这个功能? 需要用到递归遍历的方法,将所有的key-value扫描出来.

  6. Arcgis android - Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE

    报错: Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE Please check logcat output for more deta ...

  7. MySQL -A不预读数据库信息(use dbname 更快)

    mysql数据库预读与不预读数据库信息(use dbname)—Reading table information for completion of table and column names   ...

  8. swift 重载 泛式 inout的使用

    swift 重载 泛式 inout的使用 函数 func 关键字 -> 表示返回值信息等等 那我们接下来利用函数做几件事情 -a 比较两个数字的大小 -b 比较两个字符串 -c 既能比较字符串, ...

  9. Swift - 37 - 值类型和引用类型的简单理解

    //: Playground - noun: a place where people can play import UIKit // 值类型:指的是当一个变量赋值给另外一个变量的时候, 是copy ...

  10. QT5控件-QPushButton和QFocusFrame(按钮和焦点框)

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPushButton> ...