母函数这个代码看了好久才看懂。先看下HDU的课件,再看网上很不错的代码讲解,思想就是模拟手算去括号、合并同类项
TOJ 3486
#include<stdio.h>
#include<string.h>
long long a[650],b[650];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
int i,j,k;
memset(a,0,sizeof(a));
for(i=1;i<=6;i++)
a[i]=1;
for(i=1;i<n;i++)
{
memset(b,0,sizeof(b));
for(j=1;j<650;j++)
{
for(k=1;k<=6;k++)
{
b[j+k]+=a[j];
}
}
for(j=1;j<650;j++)
a[j]=b[j];
}
long long sum=0;
for(i=1;i<650;i++)
sum+=a[i];
printf("%.2lf\n",a[m]*1.0/sum);
}
return 0;
}
SOJ 1009
#include<stdio.h>
#include<stdlib.h>
int c1[10000],c2[10000];
int main()
{
double n;
int i,j,k;
while(scanf("%lf",&n)==1&&n>0.000001)
{
int res=(n+0.005)*100;
int elem[11]={5,10,20,50,100,200,500,1000,2000,5000,10000};
for (i=0;i<=res;i++)
{
c1[i]=1;
c2[i]=0;
}
for (i=2; i<=11; i++)
{
for (j=0;j<=res;j++)
for (k=0;k+j<=res; k+=elem[i-1] )
{
c2[j+k]+=c1[j];
}
for (j=0;j<=res;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
printf("%5.2lf%12d\n",n,c1[res]);
}
return 0;
}