【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp
2017-07-30 21:26
369 查看
打记录的题打多了,忘了用开维记录信息了......我们用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
- 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)
- 【bzoj4832】[Lydsy2017年4月月赛]抵制克苏恩 概率期望dp
- bzoj 4832 抵制克苏恩 概率期望dp
- bzoj 4832 抵制克苏恩 概率期望dp
- 【BZOJ4832】[Lydsy2017年4月月赛]抵制克苏恩 概率与期望
- [bzoj-4832][Lydsy2017年4月月赛]抵制克苏恩 题解
- [Bzoj4832][Lydsy2017年4月月赛]抵制克苏恩 (期望dp)
- [BZOJ]4832 抵制克苏恩 期望dp
- [BZOJ]4832: [Lydsy2017年4月月赛]抵制克苏恩
- 概率DP [Lydsy2017年4月月赛]抵制克苏恩
- BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)
- [BZOJ 4832][lydsy 4月赛] 抵制克苏恩
- bzoj 4832: 抵制克苏恩 (概率与期望DP)
- [BZOJ4832]抵制克苏恩(概率期望DP)
- 4832: [Lydsy2017年4月月赛]抵制克苏恩
- [BZOJ4832]抵制克苏恩(概率期望dp)
- bzoj[1426]收集邮票(概率期望dp)
- 【BZOJ 4008】【HNOI 2015】亚瑟王【概率与期望DP】
- bzoj1415 [Noi2005]聪聪和可可(期望概率DP+最短路)