打记录的题打多了,忘了用开维记录信息了......我们用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=;
r char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
LD f[][][][];
int main()
{
r int T=read();
while(T--)
{
for(r int i=;i<;++i)
for(r int j=;j<;++j)
for(r int l=;l<;++l)
for(r int k=;k<;++k)
f[i][j][l][k]=0.0;
r int K=read(),A=read(),B=read(),C=read();
f[][C][B][A]=1.0;
LD ans=0.0;
for(r int i=;i<K;++i)
for(r int j=;j<=;++j)
for(r int l=;l+j<=;++l)
for(r int k=;k+j+l<=;++k)
{
f[i+][j][l][k]+=f[i][j][l][k]/(+j+l+k);
ans+=f[i][j][l][k]/(+j+l+k);
if(k)
f[i+][j][l][k-]+=f[i][j][l][k]*k/(+j+l+k);
if(j+l+k<)
{
if(l)
f[i+][j+][l-][k+]+=f[i][j][l][k]*l/(+j+l+k);
if(j)
f[i+][j][l+][k]+=f[i][j][l][k]*j/(+j+l+k);
}
else
{
if(l)
f[i+][j][l-][k+]+=f[i][j][l][k]*l/(+j+l+k);
if(j)
f[i+][j-][l+][k]+=f[i][j][l][k]*j/(+j+l+k);
}
}
double Ans=ans;
printf("%.2lf\n",Ans);
}
}

最新文章

  1. JavaEE:JavaEE技术组成
  2. 大熊君学习html5系列之------requestAnimationFrame(实现动画的另一种方案)
  3. hammer.js手势库使用
  4. UIView UIwindow
  5. oracle通过plsql导入dmp数据文件
  6. FreeMarker页面中获得contextPath
  7. Android SDK无法更新解决方法
  8. Zabbix探索:Agent配置中Hostname错误引起的Agent.Ping报错
  9. linux安装JDK TOMCAT
  10. [ios2] CABasicAnimation【转】
  11. angularjs中的下拉框默认选中
  12. HTTP协议07-通用首部字段
  13. bzoj 4816
  14. python中安装request模块
  15. spring 注解@PathVariable
  16. Linux基础和网络管理上机试题 - imsoft.cnblogs
  17. 关于php优化 你必须知道的一些事情
  18. python2.7 关于打印中文的各种方法
  19. Redis-Map
  20. adroid swipeRefreshLayout无法显示进度条的问题

热门文章

  1. 点按钮ajax get方法修改0或1状态封装成函数
  2. Leecode刷题之旅-C语言/python-70爬楼梯
  3. (数据科学学习手札11)K-means聚类法的原理简介&amp;Python与R实现
  4. (数据科学学习手札09)系统聚类算法Python与R的比较
  5. 插件开发遇到的坑------final 型变量,编译过程被优化
  6. Putty的设置保存
  7. vs2015-Cordova开发安卓应用环境搭建
  8. Node.js的require()的工作原理
  9. 九度OJ--1164(C++)
  10. 九度OJ--Q1163