码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp

时间:2017-07-30 22:10:24      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:ring   name   for   span   type   2017年   不能   long   printf   

打记录的题打多了,忘了用开维记录信息了......我们用f[i][j][l][k]表示已经完成了i次攻击,随从3血剩j个,2血剩l个,1血剩k个,这样我们求出每个状态的概率,从而求出他们对答案的贡献并加和,一开始我用的期望忘了转移的时候不能用1而要用概率......

#include <cstdio>
#include <cstring>
#define r register
using namespace std;
typedef long double LD;
inline int read()
{
    r int sum=0;
    r char ch=getchar();
    while(ch<0||ch>9)ch=getchar();
    while(ch>=0&&ch<=9)
    {
        sum=(sum<<1)+(sum<<3)+ch-0;
        ch=getchar();
    }
    return sum;
}
LD f[55][10][10][10];
int main()
{
  r int T=read();
  while(T--)
  {
    for(r int i=0;i<55;++i)
        for(r int j=0;j<10;++j)
            for(r int l=0;l<10;++l)
                for(r int k=0;k<10;++k)
                    f[i][j][l][k]=0.0;
    r int K=read(),A=read(),B=read(),C=read();
    f[0][C][B][A]=1.0;
    LD ans=0.0;
    for(r int i=0;i<K;++i)
        for(r int j=0;j<=7;++j)
            for(r int l=0;l+j<=7;++l)
                for(r int k=0;k+j+l<=7;++k)
                    {
                        f[i+1][j][l][k]+=f[i][j][l][k]/(1+j+l+k);
                        ans+=f[i][j][l][k]/(1+j+l+k);
                        if(k)
                            f[i+1][j][l][k-1]+=f[i][j][l][k]*k/(1+j+l+k);
                        if(j+l+k<7)
                        {
                            if(l)
                                f[i+1][j+1][l-1][k+1]+=f[i][j][l][k]*l/(1+j+l+k);
                            if(j)
                                f[i+1][j][l+1][k]+=f[i][j][l][k]*j/(1+j+l+k);
                        }
                        else
                        {
                            if(l)
                                f[i+1][j][l-1][k+1]+=f[i][j][l][k]*l/(1+j+l+k);
                            if(j)
                                f[i+1][j-1][l+1][k]+=f[i][j][l][k]*j/(1+j+l+k);
                        }
                    }
    double Ans=ans;
    printf("%.2lf\n",Ans);
  }
}

 

【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp

标签:ring   name   for   span   type   2017年   不能   long   printf   

原文地址:http://www.cnblogs.com/TSHugh/p/7260537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!