
输入样例
5
输出样例
7
这道题想明白还是很简单的,将整数划分问题等价于向n个盘子里装n个苹果。
AC代码
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int a[60][60];
int fun(int n, int m){
if(a[n][m]) return a[n][m];
if(m <= 0) return 0;
if(!n) return 1;
if(m > n) a[n][m] = fun(n, n);
else a[n][m] = fun(n - m, m) + fun(n, m - 1);
return a[n][m];
}
int main(){
int n;
memset(a, 0, sizeof(a));
while(cin >> n){
cout << fun(n, n) << endl;
}
return 0;
}
本文通过将整数划分问题转化为向n个盘子装n个苹果的问题,详细解析了其解决思路,并提供了一段C++代码实现。该算法采用递归方式,利用动态规划思想,避免重复计算,提高了解决效率。
214

被折叠的 条评论
为什么被折叠?



