• tyvj1172 自然数拆分Lunatic版


    背景

    话说小小鱼看了P1171(自然数拆分)之后感觉异常不爽,于是异常邪恶地将题目加强。

    描述

    输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复。

    输入格式

    输入只有一个整数n,表示待拆分的自然数n。 0<n<=4000
    PS:0也算自然数,所以这里应该写正整数比较好
    但是为了尊重原作者的版权(这有版权吗- -),没有改掉。
    本来n是要到5000的,但是开到5000的话我的程序就Memory Limit Exceeded了。。

    输出格式

    输出一个数,即所有方案数
    因为这个数可能非常大,所以你只要输出这个数 mod 2147483648 的余数即可。

    测试样例1

    输入

    7

    输出

    14

    备注

    解释:
    输入7,则7拆分的结果是
    7=1+6
    7=1+1+5
    7=1+1+1+4
    7=1+1+1+1+3
    7=1+1+1+1+1+2
    7=1+1+1+1+1+1+1
    7=1+1+1+2+2
    7=1+1+2+3
    7=1+2+4
    7=1+2+2+2
    7=1+3+3
    7=2+5
    7=2+2+3
    7=3+4


    一共有14种情况,所以输出14 mod 2147483648,即14小小鱼加强Admin的P1171
    PS:虽说加强了,但是好像还是很简单。。。
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    unsigned int n,dp[4005][4005],ans,mod = 2147483648;
    int main(){
        cin>>n;
        dp[0][0] = 1;
        for(int i = 1;i <= n;i++){
            for(int j = i;j <= n;j++){
                dp[i][j] = (dp[i-1][j-1] + dp[i][j-i]) % mod;
                if(i > 1 && j == n) ans = (ans + dp[i][j]) % mod;
            }
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    一行代码更改博客园皮肤
    fatal: refusing to merge unrelated histories
    使用 netcat 传输大文件
    linux 命令后台运行
    .net core 使用 Nlog 配置文件
    .net core 使用 Nlog 集成 exceptionless 配置文件
    Mysql不同字符串格式的连表查询
    Mongodb between 时间范围
    VS Code 使用 Debugger for Chrome 调试vue
    css权重说明
  • 原文地址:https://www.cnblogs.com/hyfer/p/5754689.html
Copyright © 2020-2023  润新知