白書上的題目,我自己TLE了一發,對照代碼時發現竟然是數組開大了,而且每次初始化都是用memset,,,怪不得會TLE,以後不會亂開大數組了。。。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define eps 0.000001
using namespace std;
int i,j,k,n,m,x,y,T,big,cas,pm,pz;
double ans,d[105][105],p;
bool flag;
int main()
{
scanf("%d",&T);
for (cas=1;cas<=T;cas++)
{
scanf("%d/%d %d",&pz,&pm,&n);
memset(d,0,sizeof(d));
d[0][0]=1;
p=(double)pz/pm;
for (i=1;i<=n;i++)
{
d[i][0]=d[i-1][0]*(1-p);
for (j=1;j*pm<=i*pz;j++)
{
d[i][j]=d[i-1][j]*(1-p)+d[i-1][j-1]*p;
}
}
ans=0;
for (i=0;i*pm<=n*pz;i++)
{
ans+=d[n][i];
}
printf("Case #%d: %d\n",cas,(int)(1/ans));
}
}