| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
DP过了 生成函数为什么过不了呢,求数据。。。程序见内#include<iostream>
#include<cmath>
using namespace std;
int c,n,m,k;
double comb[101][101]={0};
double odd[300],even[300],ek[300];
double ans,tmp,kc,sum;
void setlist()
{
int i,j;
for(i=0;i<=100;++i)
comb[i][0]=1;
for(i=1;i<=100;++i)
for(j=1;j<=i;++j)
comb[i][j]=comb[i-1][j]+comb[i-1][j-1];
}
int main()
{
int i,j,ind,c_m;
setlist();
while(scanf("%d",&c)&&c){
scanf("%d%d",&n,&m);
if(m<=c&&m<=n&&m%2==n%2){
for(i=0;i<300;++i)
ek[i]=odd[i]=even[i]=0;
ans=comb[c][m]/pow(2.0,(double)c);
for(i=0;i<=m;++i)
{
ind=m-i*2+150;
if(i%2) odd[ind]=-comb[m][i];
else odd[ind]=comb[m][i];
}
c_m=c-m;
for(i=0;i<=c_m;++i)
{
ind=c_m-i*2+150;
even[ind]=comb[c_m][i];
}
for(i=0;i<=m;++i)
{
for(j=0;j<=c_m;++j)
{
ek[c-(i+j)*2+150]+=odd[m-i*2+150]*even[c_m-j*2+150];
}
}
sum=0;
if(n%2) sum=ek[c+150]-ek[150-c];
else sum=ek[c+150]+ek[150-c];
if(n<=5000){
for(k=1;k<c;++k)
{
kc=pow((double)k/(double)c,(double)n);
if(n%2) tmp=ek[k+150]-ek[150-k];
else tmp=ek[k+150]+ek[150-k];
sum+=tmp*kc;
}
}
ans*=sum;
printf("%.3lf\n",ans);
}else printf("0.000\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator