- 1. 题目
- 2. 读题(需要重点注意的东西)
- 3. 解法
- 4. 可能有帮助的前置习题
- 5. 所用到的数据结构与算法思想
- 6. 总结
思路:
闫式dp分析法
用闫式dp分析法分析整数划分问题
---------------------------------------------------解法1:优化前---------------------------------------------------
#include#include using namespace std; const int N = 1010, mod = 1e9 + 7; int n; int f[N][N]; int main() { cin >> n; for(int i = 0;i <= n;i++) f[i][0] = 1; for (int i = 1; i <= n; i ++ ) for(int j = 0; j <= n; j ++ ){ f[i][j] = f[i-1][j]; // j < i ,一个i都放不下的情况 // j >= i的情况 if(j >= i) f[i][j] = (f[i - 1][j] + f[i][j - i]) % mod; } cout << f[n][n] << endl; return 0; }
优化的思路同完全背包问题(优化成一维)
---------------------------------------------------解法2:优化后---------------------------------------------------
#include#include using namespace std; const int N = 1010, mod = 1e9 + 7; int n; int f[N]; int main() { 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]) % mod; } cout << f[n] << endl; return 0; }
可能存在的问题
4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想- 动态规划
- 计数类dp
- 完全背包问题
计数类dp的例题,理解思想并自行推导出代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)