白书上的题目,我自己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 ",cas,(int)(1/ans)); } }