听了kuangbin的把杭电上的数学分类的题都先做一遍,遇到不会就去学习别人的博客上的讲解,没想到遇到的第二道题竟然是母函数
那在这里就当是复习一下下了
题意
对一个整数进行拆分
代码
#include<iostream>
using namespace std;
#define M 101000
int c1[M],c2[M];
int main()
{
int n,i,j,k;
while(cin>>n){
for(i=0;i<=n;i++){
c1[i]=1;
c2[i]=0;
}
for(i=2;i<=n;i++){
for(j=0;j<=n;j++){
for(k=0;k+j<=n;k+=i){
c2[k+j]+=c1[j];
}
}
for(j=0;j<=n;j++){
c1[j]=c2[j];
c2[j]=0;
}
}
cout<<c1[n]<<endl;
}
return 0;
}
其实母函数就是模拟多项式的展开一项一项的计算
核心代码其实就是三个for循环
下面讲一下每一个循环的意思
第一个for循环是有除掉第一个()还有多少个括号
第二个for循环是枚举前面一个括号里的每一项(其实是不断更新的)
第三个for循环每次想乘后一个括号的多项式
数组的下标是多项式的指数,数组的值就是要求的组合种数
(突然发现大一的时候学的东西是那么的简单)