一:整数划分

这种题目完全可以转换成完全背包问题,不同的是状态标识,朴素做法,f(i,j)表示前i个物品选择恰好体积是j的数量的最大值,属性原来是最大值,现在变成数量,还有就是原来是小于等于体积

f设置的时候,直接写一维的,后面写状态转移方程的时候可以写二维,方便理解,然后在删除了就好。
#include <iostream>using namespace std;const int N = 1010, M = 1e9 + 7;int f[N];int main(){int n;cin >> n;f[0] = 1;for (int i = 1; i <= n; i++)for (int j = i; j <= n; j++)f[j] = (f[j] + f[j - i]) % M;cout << f[n] << endl;return 0;}
