zoukankan      html  css  js  c++  java
  • 【动态规划】数字分组I

    【动态规划】数字分组I

    时间限制: 1 Sec  内存限制: 64 MB
    提交: 10  解决: 6
    [提交][状态][讨论版]

    题目描述

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

    输入

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

    输出

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

    样例输入

    5
    1 2 3 4 5
    

    样例输出

    1

    将问题转化为求背包容量为所有数总和一半的背包问题
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    int f[1555555]={0},sum,n;
    int a[33];
    int main()
    {
        cin>>n;
        sum=0;
        memset(f,0,sizeof(f));
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
            sum+=a[i];
        }
        for(int i=0;i<n;i++)
        {
            for(int j=sum/2;j>=a[i];j--)
            {
                f[j]=max(f[j],f[j-a[i]]+a[i]);
            }
    
        }
        cout<<sum-2*f[sum/2]<<endl;
        return 0;
    }
    View Code
     
  • 相关阅读:
    装饰器的加载顺序
    生成器
    迭代器
    有参装饰器与装饰器补充
    无参装饰器
    闭包函数
    函数对象与函数嵌套
    名称空间与作用域
    函数参数补充
    函数参数的使用
  • 原文地址:https://www.cnblogs.com/asuml/p/5762440.html
Copyright © 2011-2022 走看看