• 正整数分组(动态规划,但我用的是枚举)


    个人心得:这题其实是一个运用动态规划的题目,将n个整数放在俩个背包里,平均下来就是sum/2,此时找到放在背包中最大的就可以了,

    此时相减必然是最小的差。而我根据动态规划一步一步得到最优解的思想,从第一个开始枚举,到第n个数会有2^n个数据太大了,n可取100,

    听说n=32,就能买下整个拉斯维加斯了。所以我用了stack和set就排重,本来以为会超时,但没想到过了。

    题目:

    将一堆正整数分为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
     1 #include<iostream>
     2 #include<cstring>
     3 #include<string>
     4 #include<cstdio>
     5 #include<vector>
     6 #include<cmath>
     7 #include<stack>
     8 #include<set>
     9 #include<queue>
    10 #include<algorithm>
    11 using namespace std;
    12 #define in 1000000005
    13 int main()
    14 {
    15     int n,number[105];
    16     cin>>n;
    17     for(int i=0;i<n;i++)
    18        cin>>number[i];
    19        stack<int >pq;
    20        set<int >s;
    21        if(n==1)
    22     {
    23         cout<<number[0]<<endl;
    24     }
    25     else
    26     {
    27         int x=fabs(number[0]-number[1]);
    28         int y=number[0]+number[1];
    29         s.insert(x),s.insert(y);
    30         set<int >::iterator  it;
    31         for(int i=2;i<n;i++)
    32         {
    33             for(it=s.begin();it!=s.end();it++)
    34             {
    35                 pq.push(*it);
    36             }
    37             s.clear();
    38             while(!pq.empty())
    39             {
    40                 int t=pq.top();
    41                 pq.pop();
    42                 s.insert(t+number[i]);
    43                 s.insert(fabs(t-number[i]));
    44             }
    45         }
    46        int mina=in;
    47        for(it=s.begin();it!=s.end();it++)
    48            if(mina>*it)  mina=*it;
    49        s.clear();
    50        cout<<mina<<endl;
    51 
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    java基础英语---第十九天
    java基础英语---第十六天
    java基础英语---第十七天
    java基础英语---第十四天
    java基础英语---第十五天
    java基础英语---第十三天
    设计模式
    设计模式
    设计模式
    设计模式
  • 原文地址:https://www.cnblogs.com/blvt/p/7580750.html
Copyright © 2020-2023  润新知