zoukankan      html  css  js  c++  java
  • 【2018级互测】志愿填报

    Description

      众所周知,今天是高考的第二天,正所谓“月儿弯弯照九州,几家欢喜几家愁”。而高考志愿填报更是抉择的时候,其中每年的高考的志愿填报都是使用的 1、2、4、8 来表示数字,如要填涂 7 则选择 1、2、4 三个数字, Pray2018 作为 1‰的数学爱好者,他决定研究这一问题, 即, 给出 n 个互不相同的正整数, 记为 s[i] , 每个正整数只能使用一次,求这 n 个数 不能组合得到的最小值。

    Input

      第一行是一个正整数 n,表示正整数的个数。
      接下来的 n 行每行一个正整数。

    Output

      一个正整数,表示这 n 个数 不能组合得到的最小值。

    Sample Input

    4
    1
    2
    4
    8

    Sample Output

    16

    Hint

    【数据规模 与约定】
      对于 30%的数据,n<=500,s[i]<=1000;
      对于 70%的数据,n<=1000,s[i]<=10000;
      对于 100%的数据,n<=100000,s[i]<=100000。


    思路

    • 找规律,发现:
      设n个数为A1,A2,A3......An
      满足:A2<=A1+1,A3<=A1+A2+1,A4<=A1+A2+A3+1......
      则:所有小于等于An的数都可以被凑出

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int n,a[100005];
    long long ans;
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    	sort(a+1,a+n+1);
    	for(int i=1;i<=n;++i)
    	{
    		if(a[i]<=ans+1) ans+=a[i];
    		else break;
    	}
    	printf("%d
    ",ans+1);
    	return 0;
    }
    
  • 相关阅读:
    CH1301 邻值查找【set应用】
    poj1185 炮兵阵地【状压DP】
    codeforces#516 Div2---ABCD
    2017ACM-ICPC沈阳区域赛
    poj2411 Mondriaan's Dream【状压DP】
    hdu2196 Computer【树形DP】【换根法】
    poj3345 Bribing FIPA【树形DP】【背包】
    poj1463 Strategic game【树形DP】
    poj1191 棋盘分割【区间DP】【记忆化搜索】
    CH5E09 能量相连【区间DP】
  • 原文地址:https://www.cnblogs.com/wuwendongxi/p/13372824.html
Copyright © 2011-2022 走看看