hdu4104(数学归纳法)

来源:互联网 发布:python 画图 技巧 编辑:程序博客网 时间:2024/05/29 07:58

链接:点击打开链接

题意:给出N个数,每个数最多用一次,现在要从中选出一些数加和,求不能构成的最小的值是多少

代码:

#include <queue>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int a[1005];int main(){    int n,i,j,ans;                              //假设前n个数能组成[1...S],那么对于    while(scanf("%d",&n)!=EOF){                 //第n+1个数来说,当a[n+1]<=S+1时,则        for(i=1;i<=n;i++)                       //又可以形成[a[n+1]...S+a[n+1]]一个新        scanf("%d",&a[i]);                      //的连续区间,现在要做的就是使这两个区        ans=0;                                  //间有交集,因此需要a[n+1]<=S+1,否则        sort(a+1,a+n+1);                        //S+1就是不能构成的最小的数        for(i=1;i<=n;i++){            if(a[i]<=ans+1)            ans+=a[i];            else            break;        }        printf("%d\n",ans+1);    }    return 0;}

原创粉丝点击