1 条题解

  • 0
    @ 2024-12-24 9:48:49

    C++ :

    #include<iostream>
    using namespace std;
    typedef int I;
    #define X(A,B) (A[B[0]][B[1]][B[2]][B[3]][B[4]][B[5]])
    double cache[7][7][7][7][7][7];
    bool vis[7][7][7][7][7][7];
    double win(int h[6])
    { if(X(vis,h)) return X(cache,h);
      X(vis,h)=true;
      X(cache,h)=0.;
      I mx=0;
      for(I i=0;i<6;i++)mx=max(mx,h[i]);
      I i=0,hh[6];
      for(I j=0;j<mx;j++)
      { for(I d=0;d<2;d++)
        {i=0+5*d;
          double loss=0.;
          for(I p=1;p<=3;p++)
           { for(I k=0;k<6;k++)hh[k]=h[k];
            I pp=p;
            I k=i;
            while(pp)
            { if(k<0||k>5)break;
              if(hh[k]>j)hh[k]--,pp--;
              k+=1-2*d;
            }
            loss+=win(hh);
          }
          loss=(1-loss/3.);
          if(loss>X(cache,h))X(cache,h)=loss;
        }
      }
      return X(cache,h);
    }
    I main()
    { I n;
      while(scanf("%d",&n)==1&&n)
      { I h[6]={0};
        for(I i=0;i<n;i++)scanf("%d",&h[i]);
        printf("%.6lf\n",win(h));
      }
      return 0;
    }
    
    • 1

    信息

    ID
    755
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者