注解
1、动态规划dp或母函数,解决整数划分问题。
2、以动态规划方法为例:从小往大叠加。初始时a[0]=1,表示和为0的有一种方案,然后每次叠加i,那么从i到max数目就都会有增加,a[j]的个数就增加a[j-i]个,也就是a[j]+=a[j-i]
3、注意数据范围,本题不会超出int
代码
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 120;
int a[maxn+1];
int main() {
memset(a, 0, sizeof(a));
a[0] = 1;
for(int i=1; i<=maxn; i++){
for(int j=i; j<=maxn; j++){
a[j] += a[j-i];
}
}
int N;
while(cin>>N){
cout<<a[N]<<endl;
}
return 0;
}