AC通道:http://vjudge.net/problem/HDU-1028
【题解】
母函数模板题。
/************ hdu 1028 by chty 2016.12.3 ************/ #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<ctime> #include<cmath> #include<algorithm> using namespace std; #define FILE "read" #define MAXN #define up(i,j,n) for(int i=j;i<=n;i++) #define down(i,j,n) for(int i=j;i>=n;i--) namespace INIT{ char buf[1<<15],*fs,*ft; inline char getc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;} inline int read(){ int x=0,f=1; char ch=getc(); while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getc();} while(isdigit(ch)) {x=x*10+ch-'0'; ch=getc();} return x*f; } }using namespace INIT; int n,c1[150],c2[150]; int main(){ freopen(FILE".in","r",stdin); freopen(FILE".out","w",stdout); while(~scanf("%d",&n)){ up(i,0,n) c1[i]=1; up(i,2,n){ up(j,0,n) for(int k=0;k+j<=n;k+=i) c2[j+k]+=c1[j]; up(j,0,n) c1[j]=c2[j],c2[j]=0; } printf("%d\n",c1[n]); } return 0; }