AC的同志们指教一下。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double p[6];
int de[6];
int xu[6];
int n;
double ans;
int stop;
int compare( const void *arg1, const void *arg2 )
{
int *A=arg1,*B=arg2;
if (p[*A]>p[*B]) return 1;
else if(p[*A]<p[*B]) return -1;
else return 0;
}
void dfs(int from,int deep, double p0,int nodead)
{
int i,j;
if(p0<1e-10) return;
if(nodead==1)
{
ans+=deep*p0;
return;
}
for(i=1;i<n;i++)
{
if(!de[(from+i)%n])
break;
}
dfs((from+i)%n,deep+1,p0*(1.0-p[from]),nodead);
for(j=0;j<n;j++)
if(!de[xu[j]]&&(xu[j]!=from))
break;
de[xu[j]]=1;
for(i=1;i<n;i++)
{
if(!de[(from+i)%n])
break;
}
dfs((from+i)%n,deep+1,p0*p[from],nodead-1);
de[xu[j]]=0;
}
int main()
{
int i,a;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a);
p[i]=(double)a/100.0;
xu[i]=i;
}
qsort(xu,n,sizeof(int),compare);
dfs(0,0,1,n);
printf("%.3f",ans);
}