整数拆分

母函数模板解决整数拆分问题

//#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;
}

posted on 2019-11-27 19:32  littleyy  阅读(191)  评论(0)    收藏  举报

导航