• Hrbust-2090 背包(最小不可构造数)


    这里写图片描述

    和背包没什么关系,记得之前有到题是关于奖券的,根据不同面值的奖券能组合出连续的最大值就是奖券能消费的值。都是求最小不可构造数首先肯定要有1,然后我们遍历下一个2是否能组合出来…..一个递推的过程。判断一个值是否可以构造出来,取一个最小的值判断其是否小于等于被构造的值,首先确定加入上一个最小值后的那个总和是可以被构造出来的,那么加入新的最小值扩充了这个sum求和,如,1,1,1,1,1的sum为5,那么如果我加入一个新值3,小于5,于是大于5的值,都可以依托新加入的值3,而构造出来,因为1~5可以构造,那么随意取一个可构造的值加上3,即5往后的3个值全部可以构造。

    sum表示将要表示的下一个数。如,先判断sum=1时,是否能构造,如果最小的数都大于1,那么就无法构造,如果能构造,那说明有1,加到sum上,sum=2,再用下一个a[i]判断是否能构造出2这个数。

    如果下一个a[i]>sum,也就是说除了1外无法构造出2本身,就break掉。 接下来的3,4,5同理,如果有了1,2,再判断3,有了1,2,3再判断6,如果a[i]<6那么就可以被之前存在的任一一个数构造出来。如果a[i]比sum还大,那么从上一个数到sum这段区间就有数无法表示

    #include<stdio.h>
    int n,i,a[10000005];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(i=0;i<n;i++) scanf("%d",&a[i]);
            long long sum=1;
            for(i=0;i<n;i++)
                if(a[i]<=sum)///判断在有序的序列中,是否能利用当前a[i]表示sum
                    sum+=a[i];
                else
                    break;
            printf("%lld
    ",sum);
        }
        return 0;
    }
    
  • 相关阅读:
    Mysql技术内幕——InnoDB存储引擎
    Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化
    Mysql5.5 InnoDB存储引擎配置和优化
    MySQL存储引擎总结
    MySQL存储引擎--MyISAM与InnoDB区别
    MySQL存储引擎
    Mysql的建表规范与注意事项
    安装好oracle11gR2之后在相应路径下却没有生成tnsnames.ora和listener.ora
    split切割.号的字符串
    配置文件c3p0-config.xml
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11135747.html
Copyright © 2020-2023  润新知