计数DP

作者: Tsukinousag | 来源:发表于2021-02-22 13:21 被阅读0次

    整数划分

    原题链接

    方法一:完全背包+一维滚动数组

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int N=1010,mod=1e9+7;
    int n;
    int f[N];
    
    int main()
    {
        cin>>n;
        f[0]=1;//f[][0]=>体积是0,只有一种选法,啥都不选
        
        for(int i=1;i<=n;i++)
            for(int j=i;j<=n;j++)
                f[j]=(f[j]+f[j-i])%mod;
        
        cout<<f[n]<<endl;
        
        return 0;
    }
    

    方法二:

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int N=1010,mod=1e9+7;
    
    int dp[N][N];
    int n;
    
    int main()
    {
        cin>>n;
        
        dp[0][0]=1;//j=0,总和等于0, 不选  是一种方案
        
        for(int i=1;i<=n;i++)
            for(int j=1;j<=i;j++)
                dp[i][j]=(dp[i-1][j-1]+dp[i-j][j])%mod;
        
        int ans=0;
        for(int i=1;i<=n;i++)
            ans=(ans+dp[n][i])%mod;
            
        cout<<ans<<endl;
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:计数DP

        本文链接:https://www.haomeiwen.com/subject/yishfltx.html