2023-9-22 整数划分

题目链接:整数划分

2023-9-22 整数划分_第1张图片

转化成背包问题

#include 
#include 

using namespace std;

const int N = 1010, mod = 1e9 + 7;

int n;
int f[N];

int main()
{
    cin >> n;
    
    f[0] = 1;
    
    // i 相当于第i个物品的体积
    for(int i =1; i <= n; i ++)
        // j 相当于总的体积
        for(int j = i; j <= n; j ++)
            f[j] = (f[j] + f[j - i]) % mod;
    
    cout << f[n] << endl;
    
    return 0;
}

其他做法

#include 
#include 

using namespace std;

const int N = 1010, mod = 1e9 + 7;

int n;
int f[N][N];

int main()
{
    cin >> n;
    
    f[0][0] = 1;
    
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= i; j ++)
            f[i][j] = (f[i - 1][j - 1] + f[i - j][j]) % mod;
            
    int res = 0;
    
    for(int i = 1; i <= n; i ++) res = (res + f[n][i]) % mod;
    
    cout << res << endl;
    
    return 0;
}

你可能感兴趣的:(算法,动态规划)