zoukankan      html  css  js  c++  java
  • 51nod 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
    输出这个最小差
      

        对于题意,可以猜想2组的差最小,那么每一组都要接近sum/2,这样就转化成了普通的0 - 1背包了。
    #include<map>
    #include<queue>
    #include<stack>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define INF 99999999
    #define mod 1000000007
    #define ll __int64
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define key_value ch[ch[root][1]][0]
    using namespace std;
    const int MAXN = 110;
    int dp[10010];
    int n,m;
    int val[MAXN];
    int main()
    {
        while(cin >>n)
        {
            int sum = 0;
            for(int i = 1; i <= n; i++){
                cin >>val[i];
                sum += val[i];
            }
            sort(val+1,val+n+1);
            memset(dp,0,sizeof(dp));
            for(int i = 1; i <= n; i++){
                for(int j = sum/2; j >= val[i]; j--){
                    dp[j] = max(dp[j],dp[j - val[i]]+val[i]);
                }
            }
            cout<<abs(sum - dp[sum/2]*2)<<endl;
        }
    }
  • 相关阅读:
    Xcode配置.pch文件
    iOS ViewController生命周期
    小技巧 -- 隐藏导航栏返回按钮附带的文字
    添加App启动页面
    iOS 关于nil和Nil及null与<null>的区别
    文件上传之组件
    js验证
    java mail
    validform 一款好用的表单验证插件
    tomcat启动时出错
  • 原文地址:https://www.cnblogs.com/sweat123/p/5262292.html
Copyright © 2011-2022 走看看