1 条题解

  • 0
    @ 2025-5-19 22:20:25

    递归方程为:dp[n][m]= dp[n][m-1]+ dp[n-m][m-1]
    dp[n][m]表示整数 n 的划分中,每个数不大于 m 的划分数。    同样划分情况分为两种情况:   a.划分中每个数都小于m,相当于每个数不大于 m-1,划分数为 dp[n][m-1].   b.划分中有一个数为 m.在n中减去m,剩下相当对n-m进行划分,

    并且每一个数不大于m-1,故划分数为 dp[n-m][m-1] c++代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e3+10,M=1e9+7;
    int f[N][N];
    int main(){
        int n,ans=0;cin>>n;
        f[1][1]=1;
        for(int i=2;i<=n;i++){
            for(int j=2;j<=i;j++){
                f[i][j]=(f[i-1][j-1]+f[i-j][j-1])%M;
            }
        }
        for(int i=1;i<=n;i++){
            ans=(ans+f[n][i])%M;
        }
        cout<<ans;
    }
    

    信息

    ID
    47
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    6
    已通过
    4
    上传者