传送门

题目大意:

攻击k次,每次可攻击随从或英雄。

随从数不大于7个,且1滴血的a个,2滴b个,3滴c个。

攻击一次血-1,如果随从没死可以生成3滴血随从一个

题解:

概率/期望dp

f[i][j][p][q]表示攻击i次,一滴血的有j个,二滴血的有p个,三滴血的有q个。

转移就是枚举打在谁身上

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int t,a,b,c,k; double f[][][][]; int main(){
scanf("%d",&t);
f[i][j][p][q]//攻击了i次,一滴血的j个,二滴血的p个,三滴血的q个
while(t--){
scanf("%d%d%d%d",&k,&a,&b,&c);
memset(f,,sizeof(f));
f[][a][b][c]=.;
double ans=.;
for(int i=;i<k;i++){
for(int j=;j<=;j++){
for(int p=;p<=;p++){
for(int q=;q<=;q++){
if(j+p+q>)break;
f[i+][j][p][q]+=f[i][j][p][q]/(j+p+q+);
ans+=f[i][j][p][q]/(j+p+q+);
if(j+p+q==){
if(j)f[i+][j-][p][q]+=f[i][j][p][q]*j/(j+p+q+);
if(p)f[i+][j+][p-][q]+=f[i][j][p][q]*p/(j+p+q+);//攻击二滴血的,二滴血的-1,一滴血的+1
if(q)f[i+][j][p+][q-]+=f[i][j][p][q]*q/(j+p+q+);
}else{
if(j)f[i+][j-][p][q]+=f[i][j][p][q]*j/(j+p+q+);
if(p)f[i+][j+][p-][q+]+=f[i][j][p][q]*p/(j+p+q+);
if(q)f[i+][j][p+][q]+=f[i][j][p][q]*q/(j+p+q+);//攻击三滴血的-1,二滴血+1,三滴血+1
}
}
}
}
}
printf("%.2f\n",ans);
}
return ;
}

AC

最新文章

  1. (c语言编程)出现错误:null undeclared identifier
  2. jquery+jplayer实现歌词同步的mp3音乐播放器效果
  3. html中相似的标签、属性的区别
  4. CSS3初学篇章_3(属性选择符/字体样式/元素样式)
  5. 【转】cocos2d-x 开发中使用的一些工具
  6. 谈谈SpringMVC Validation
  7. IFS解惑
  8. Java中关于继承、类、多态、接口的知识点
  9. jquery属性与样式
  10. 2.Ray-消息发布器与消息存储器
  11. tcc-transaction 分析
  12. Pandas数据处理+Matplotlib绘图案例
  13. Java学习笔记之——常用类
  14. window10 matlabR2015b 安装minGw
  15. python 执行sql得到字典格式数据
  16. SPLIT_STR
  17. cxVerticalGrid赋值是实时更新
  18. C# 获取所有对象的字符串表示一ToString方法
  19. Linux运维之--LVS、Nginx、HAproxy有什么区别?
  20. you have mixed tabs and spaces fix this

热门文章

  1. Tomcat 启动内存修改
  2. 2018-2019-2 20165114《网络对抗技术》Exp4 恶意代码分析
  3. VS 安装部署项目自解压程序解压后按顺序执行多个程序
  4. Valid Number,判断是否为合法数字
  5. easyui扩展数据表格点击加号拓展
  6. LeetCode第[14]题(Java): Longest Common Prefix
  7. 7z压缩gopath的src的批处理
  8. 离线安装Chrome扩展和App
  9. Android 中的BroadCastReceiver
  10. React typescript issue