母函数的应用 HDU 1028 #includestdio.h#includestringusing namespace std;int n,c1[200],c2[200];int main(){int i,j,k;while(scanf("%d",n)!=EOF){memset(c2,0,sizeof(c2));for(i=0;i=n;i++)c1[i]=1;for(i=2;i=n;i++){for(j=0;j=n;j++)for(k=0;k+j=n
母函数的应用
HDU 1028
#include<stdio.h>
#include<string>
using namespace std;
int n,c1[200],c2[200];
int main(){
int i,j,k;
while(scanf("%d",&n)!=EOF){
memset(c2,0,sizeof(c2));
for(i=0;i<=n;i++)
c1[i]=1;
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;
}
}
printf("%d\n",c1[n]);
}
}
HDU 1398
#include<stdio.h>
#include<string>
using namespace std;
int n,mod;
int c1[500],c2[500];
int main(){
int i,j,k;
memset(c2,0,sizeof(c2));
for(i=0;i<=300;i++)
c1[i]=1;
for(i=2;i<=17;i++){
for(j=0;j<=300;j++)
for(k=0;k+j<=300;k+=i*i)
c2[k+j]=(c2[k+j]+c1[j]);
for(j=0;j<=300;j++){
c1[j]=c2[j];
c2[j]=0;
}
}
while(scanf("%d",&n)!=EOF && n!=0){
printf("%d\n",c1[n]);
}
}
HDU 1085
#include<stdio.h>
#include<string>
using namespace std;
int n;
int c1[10000],c2[10000],a[5];
int main(){
int i,j,k,max;
while(scanf("%d %d %d",&a[1],&a[2],&a[3])!=EOF && !(a[1]==0 && a[2]==0 && a[3]==0)){
memset(c2,0,sizeof(c2));
memset(c1,0,sizeof(c1));
for(i=0;i<=a[1];i++)
c1[i]=1;
for(i=2;i<=3;i++){
if(i==2)
max=a[1]+a[2]*2;
else
max=a[1]+a[2]*2+a[3]*5;
if(i==2){
for(j=0;j<=a[1];j++)
for(k=0;k<=a[2]*2;k+=2)
c2[k+j]+=c1[j];
for(j=0;j<=max;j++){
c1[j]=c2[j];
c2[j]=0;
}
}
else{
for(j=0;j<=a[1]+a[2]*2;j++)
for(k=0;k<=a[3]*5;k+=5)
c2[k+j]+=c1[j];
for(j=0;j<=max;j++){
c1[j]=c2[j];
c2[j]=0;
}
}
}
for(i=1;;i++)
if(c1[i]==0){
printf("%d\n",i);
break;
}
}
}
【文章转自:美国站群服务器 http://www.558idc.com/mgzq.html处的文章,转载请说明出处】