zoukankan      html  css  js  c++  java
  • 01背包求解组合最值问题

    【题目描述】(Stone1.cpp/c/pas) Ural 1005

    给出一堆魔法石的重量,问如何分成两堆,使得它们质量和之差最小,求出这个最小值。

    【输入格式】

           第一行一个数n (n ≤30)。

           接下来n行,每行一个正整数。(每个数≤100000)

    【输出格式】

           一个整数表示两组数字和的最小差。

    【输入样例1】

    5

    1 2 3 4 5

    【输出样例1】

    1

    【输入样例2】

    5

    5 8 13 27 14

    【输出样例2】

    3

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn=1500000+10;
    int a[100];
    int dp[maxn];
    int main(){
        freopen("Stone1.in","r",stdin);
        freopen("Stone1.out","w",stdout);
        int n;
        scanf("%d",&n);
        int sum=0;
        for (int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        for (int i=1;i<=n;i++){
            for (int j=sum;j>=a[i];j--){
                dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
            }
        }
        int ans=10000000;
        for (int i=0;i<=sum;i++){
                int t=fabs(sum-dp[i]-dp[i]);
                if(dp[i])
            ans=min(ans,t);
        }
        printf("%d ",ans);
    return 0;
    }

  • 相关阅读:
    Unix系统中system函数的返回值
    vim 插件 for gbasic
    arch初认识
    TI IPNC Web网页之进阶修改
    Ti IPNC Web网页之ActiveX控件
    TI IPNC Web网页之网页修改教程
    OI,再见
    [OI]省选前模板整理
    OI刷题录——hahalidaxin
    51nod 小Z的trie(Trie+广义SAM)
  • 原文地址:https://www.cnblogs.com/lmjer/p/7994263.html
Copyright © 2011-2022 走看看