整数拆分
母函数模板解决整数拆分问题
//#include<bits/stdc++.h> #include<iostream> using namespace std; typedef long long ll; const int maxn=210; ll c1[maxn],c2[maxn]; void part() { for(int i=0;i<maxn;i++){//初始化,即第一部分(1+x+x^2+...)的系数,都是1 c1[i]=1; c2[i]=0; } for(int k=2;k<maxn;k++){//从第二部分(1+x^2+x^4+...)开始展开 for(int i=0;i<maxn;i++){ //k=2时,i循环第一部分,j循环第二部分 for(int j=0;j+i<maxn;j+=k){ c2[i+j]+=c1[i]; } } for(int i=0;i<maxn;i++){//更新本次展开结果 c1[i]=c2[i]; c2[i]=0; } } } int main() { part(); int n; while(~scanf("%d",&n)){ printf("%lld\n",c1[n]); } return 0; }
浙公网安备 33010602011771号