注意到A+B+C很小,容易想到设f[i][A][B][C]为第i次攻击后有A个血量为1、B个血量为2、C个血量为3的期望伤害,倒推暴力转移即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
double f[][][][];
int T,n,a,b,c;
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4832.in","r",stdin);
freopen("bzoj4832.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
T=read();
for (int i=;i<=;i++)
for (int x=;x<=;x++)
for (int y=;y<=-x;y++)
for (int z=;z<=-x-y;z++)
{
f[i][x][y][z]=f[i-][x][y][z]+;
if (x) f[i][x][y][z]+=f[i-][x-][y][z]*x;
if (y) f[i][x][y][z]+=f[i-][x+][y-][z+(x+y+z<)]*y;
if (z) f[i][x][y][z]+=f[i-][x][y+][z-+(x+y+z<)]*z;
f[i][x][y][z]/=(x+y+z+);
}
while (T--)
{
n=read(),a=read(),b=read(),c=read();
printf("%.2lf\n",f[n][a][b][c]);
}
return ;
}

最新文章

  1. time step和采样频率的关系
  2. BZOJ3505 [Cqoi2014]数三角形
  3. GoodReader跨域访问HT for Web手册
  4. Codeforces Round #350 (Div. 2) E 思维模拟
  5. Dynamics Webservice Call with Credential
  6. win32手动创建windows窗口的,小记
  7. Wikioi 1020 孪生蜘蛛 Label:Floyd最短路
  8. JS面相对象
  9. Java基础之创建窗口——使用卡片布局管理器(TryCardLayout)
  10. Jquery 全选、反选
  11. Form表单三种提交按钮的区别?
  12. 1、Spark 通过api,hfile两种形式获取hbase数据,简单样例
  13. iOS10 CAAnimationDelegate的适配
  14. Linux怎样创建FTP服务器
  15. Git的基本原理与常用命令[二]
  16. fork()相关的源码解析
  17. python 字典中的get()方法
  18. 1. Tensorflow高效流水线Pipeline
  19. redflag的echarts结构
  20. C++ Builder使用VC DLL

热门文章

  1. Android事件分发机制浅析(1)
  2. Odd CSS syntax. [class^=&#39;icon-&#39;], [class*=&#39; icon-&#39;]
  3. JMeter随机上传附件
  4. Python中一些糟糕的语法!你遇到过吗?还知道那些?
  5. browsersync 插件
  6. 浅谈CPU、内存、硬盘之间的关系
  7. javascript打开新窗口
  8. Python高级编程-使用SQLite
  9. 【转载】java byte转十六进制
  10. Redis 错误摘记篇