zoukankan      html  css  js  c++  java
  • 51NOD 1201 整数划分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201

    一样的思路

    http://www.cnblogs.com/liuweimingcprogram/p/6072869.html

    由于其是先算dp[1][1--n]的,故需要用ans数组存

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define IOS ios::sync_with_stdio(false)
    using namespace std;
    #define inf (0x3f3f3f3f)
    typedef long long int LL;
    
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <string>
    #include <time.h>
    const int MOD = 1e9 + 7;
    const int maxn = 50000 + 20;
    int dp[2][maxn];
    const int N = maxn - 20;
    int ans[maxn];
    void work() {
        dp[0][0] = 1;
        int now = 0;
        int all = 0;
        for (int i = 1; i <= N; ++i) {
            if (i * (i + 1) / 2 > N) break;
            for (int j = i * (i + 1) / 2; j <= N; ++j) {
                dp[now][j] = (dp[now][j - i] + dp[!now][j - i]) % MOD;
                ans[j] += dp[now][j];
                ans[j] %= MOD;
                all++;
            }
            memset(dp[!now], 0, sizeof dp[!now]);
    //        all += maxn;
            now = !now;
        }
    //    cout << all << endl;
    ////    cout << ans[N] << endl;
    //    for (int i = 1; i <= 20; ++i) {
    //        cout << ans[i] << endl;
    //    }
        int n;
        scanf("%d", &n);
        printf("%d
    ", ans[n]);
    }
    
    int main() {
    #ifdef local
        freopen("data.txt","r",stdin);
    #endif
    //    LL t = time(NULL);
    //    cout << t << endl;
        work();
    //    LL tt = time(NULL);
    //    cout << tt  << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    语文成语的积累
    关于翻译
    关于文常
    语文小说
    语文 散文阅读
    矩佬的博客
    字词
    语文病句
    地理
    寒假某cg的数学卷子....
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/6072959.html
Copyright © 2011-2022 走看看