rt
这段代码:
int p=1;
for(int i=1;i<=n-1;++i)p*=i;
do{
memset(f,0,sizeof f);
f[l[n]*n][0]=1;
for(int i=0;i<=n*c;++i){
int p=i%n;if(i%n==0)continue;
for(int j=i;j<=n*c;++j){
for(int s=0;s<(1<<n-1);++s){
if(s&(1<<p-1))continue;
f[min(n*c,max(j,i+l[p]*n))][s|(1<<p-1)]+=f[j][s];
// cout<<f[j][s]<<' ';
}
}
}
ans+=f[n*c][(1<<n-1)-1];
cout<<ans<<' ';
++cnt;
}while(next_permutation(l+1,l+n));
printf("%.12lf\n",ans*1.0/p/pow(c,n-1));
最后一行改成:
printf("%.12lf\n",ans*1.0/cnt/pow(c,n-1));
后当 l 有重复数据时答案会不同
输入:
4 2
1 1 1 1
第一段:
0.083333333333
4
第二段:
0.500000000000
4
问一下这是为什么。
个人感觉是 next_permutation 的所谓 自适应,但感觉这样不就不对了吗,还有想问一下它是怎么做到检测 cnt 用不用的啊(好像单输出 cnt 也是 1,似乎也不是简单的检测?)。