zoukankan      html  css  js  c++  java
  • POJ 2229 Sumsets

    dp[i][j]表示i这个数字用前j个来拼凑有几种方案。

    我写的时间复杂度是o(20000000),理论上打个表,然后o(1)输出妥妥的可以AC。

    但是后台居然是一个文件一组数据的。。。。。。

    做了点优化之后,C++ 压线AC 正好2000ms,G++1200ms。

    此外,这题应该是可以找规律AC的。

    15303733 14rj134 2229 Accepted 86572K 1329MS G++ 564B 2016-03-23 16:08:51
    15303730 14rj134 2229 Accepted 86352K 2000MS C++ 564B 2016-03-23 16:08:30
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    int dp[1000000+10][22];
    int a[100];
    const int mod=1000000000;
    int n;
    
    void work()
    {
        a[1]=1;
        for(int i=2;i<=20;i++) a[i]=a[i-1]*2;
       // memset(dp,0,sizeof dp);
        for(int i=1;i<=20;i++) dp[0][i]=1;
        for(int j=1;j<=n;j++)
        {
            for(int i=1;i<=20;i++)
            {
                if(a[i]>j) {dp[j][i]=dp[j][i-1];continue;}
                dp[j][i]=(dp[j][i-1]+dp[j-a[i]][i])%mod;
            }
        }
    }
    
    
    int main()
    {
        scanf("%d",&n);
        work();
        printf("%d
    ",dp[n][20]);
        return 0;
    }
  • 相关阅读:
    K
    士兵队列训练问题
    分析A + B Problem II
    C++中sort()的用法
    swing初级应用创建一个窗体
    java生成随机数
    JAVA数字格式化
    CodeForces
    POJ
    51Nod
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5311646.html
Copyright © 2011-2022 走看看