zoukankan      html  css  js  c++  java
  • noip模拟赛 拼不出的数

    分析:如果每个数可以选任意多次,那么就是一个很普通的dp问题,这里每个数只能选一次,还是考虑dp,设f(i)表示1~i是否都能选上.考虑下一个数j,如果j > i + 1,那么i+1这个数就选不上,答案就是i+1,否则f(i)可以转移到f(i + j),这个算法是建立在集合有序的情况下的,所以要先排序.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int n, a[100010];
    long long sum;
    
    int main()
    {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        sort(a + 1, a + 1 + n);
        for (int i = 1; i <= n; i++)
        {
            if (a[i] > sum + 1)
            {
                printf("%lld
    ", sum + 1);
                return 0;
            }
            else
                sum += a[i];
        }
        printf("%lld
    ", sum + 1);
    
        return 0;
    }
  • 相关阅读:
    nio的学习
    并发编程学习(二)
    并发编程学习(一)
    linux基础知识-常用命令
    linux基础知识-目录结构
    springcloud的config
    zuul学习
    hystrix学习
    feign学习
    ribbon学习
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7694073.html
Copyright © 2011-2022 走看看