一:整数划分

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

f设置的时候,直接写一维的,后面写状态转移方程的时候可以写二维,方便理解,然后在删除了就好。

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 1010, M = 1e9 + 7;
  4. int f[N];
  5. int main()
  6. {
  7. int n;
  8. cin >> n;
  9. f[0] = 1;
  10. for (int i = 1; i <= n; i++)
  11. for (int j = i; j <= n; j++)
  12. f[j] = (f[j] + f[j - i]) % M;
  13. cout << f[n] << endl;
  14. return 0;
  15. }