关于 next_permutation
  • 板块学术版
  • 楼主wYYSZLwSSY
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/6/15 20:57
  • 上次更新2023/10/23 13:04:50
查看原帖
关于 next_permutation
297683
wYYSZLwSSY楼主2023/6/15 20:57

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,似乎也不是简单的检测?)。

2023/6/15 20:57
加载中...