![在这里插入图片描述](https://img-blog.csdnimg.cn/20200409162644208.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1aGFuZzUxMw==,size_16,color_FFFFFF,t_70)
- 首先要知道x^2 * x^3 = x^(2+3),并非求x的值,是求 x^n的系数
- 注:并非解,只是一个模型
- 4种可以分解成(1+x1+x2+x3+x4)(1+x2+x4)(1+x3)(1+x4)
- 1*任何数都等于任何数,所以这里可以表示 空
- 最后的结果是5x^4……,所以答案是5
- 其中的一部分来自第一个括号的x4
- 所以代码的目标是化解括号
- 之所以要从c1[0] = 1开始赋值,因为最后一个x4要是刚好可以满足条件的情况,没有东西可以赋值
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<math.h>
#include<string.h>
#include<sstream>
using namespace std;
int c1[125];
int c2[125];
int n;
int main() {
ios::sync_with_stdio(false);
while(cin >> n){
for(int i = 0; i <= n; i ++){
c1[i] = 0;
c2[i] = 0;
}
for(int i = 0; i <= n; i ++)
c1[i] = 1;
for(int i = 2; i <= n; i ++){
for(int j = 0; j <= n; j ++){
for(int k = 0; k + j <= n; k += i){
c2[j + k] += c1[j];
}
}
for(int j = 0; j <= n; j ++){
c1[j] = c2[j];
c2[j] = 0;
}
}
cout << c1[n] << endl;
}
return 0;
}