题面贴一发

[Lydsy2017年4月月赛]抵制克苏恩

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 443  Solved: 164
[Submit][Status][Discuss]

Description

小Q同学现在沉迷炉石传说不能自拔。他发现一张名为克苏恩的牌很不公平。如果你不玩炉石传说,不必担心,小Q
同学会告诉你所有相关的细节。炉石传说是这样的一个游戏,每个玩家拥有一个 30 点血量的英雄,并且可以用牌
召唤至多 7 个随从帮助玩家攻击对手,其中每个随从也拥有自己的血量和攻击力。小Q同学有很多次游戏失败都是
因为对手使用了克苏恩这张牌,所以他想找到一些方法来抵御克苏恩。他去求助职业炉石传说玩家椎名真白,真白
告诉他使用奴隶主这张牌就可以啦。如果你不明白我上面在说什么,不必担心,小Q同学会告诉你他想让你做什么
。现在小Q同学会给出克苏恩的攻击力是 K ,表示克苏恩会攻击 K 次,每次会从对方场上的英雄和随从中随机选
择一个并对其产生 1 点伤害。现在对方有一名克苏恩,你有一些奴隶主作为随从,每名奴隶主的血量是给定的。
如果克苏恩攻击了你的一名奴隶主,那么这名奴隶主的血量会减少 1 点,当其血量小于等于 0 时会死亡,如果受
到攻击后不死亡,并且你的随从数量没有达到 7 ,这名奴隶主会召唤一个拥有 3 点血量的新奴隶主作为你的随从
;如果克苏恩攻击了你的英雄,你的英雄会记录受到 1 点伤害。你应该注意到了,每当克苏恩进行一次攻击,你
场上的随从可能发生很大的变化。小Q同学为你假设了克苏恩的攻击力,你场上分别有 1 点、 2 点、 3 点血量的
奴隶主数量,你可以计算出你的英雄受到的总伤害的期望值是多少吗?
 
 
 

Input

输入包含多局游戏。
第一行包含一个整数 T (T<100) ,表示游戏的局数。
每局游戏仅占一行,包含四个非负整数 K, A, B 和 C ,表示克苏恩的攻击力是 K ,你有 A 个 1 点血量的奴隶
主, B 个 2 点血量的奴隶主, C 个 3 点血量的奴隶主。
保证 K 是小于 50 的正数, A+B+C 不超过 7 。
 
 

Output

对于每局游戏,输出一个数字表示总伤害的期望值,保留两位小数。

 

Sample Input

1
1 1 1 1

Sample Output

0.25

这题是一个比较简单的概率DP,可以开一个四维的$DP$数组$f_{i,j,k,l}$,代表克苏恩第 $i$ 次攻击且当时场上有 $1$ 血奴隶主 $j$ 个, $2$ 血奴隶主 $k$ 个,$3$ 血奴隶主 $l$ 个时英雄收到攻击的概率.转移方式则有四种情况:

若攻击到英雄,则触发转移$f_{i+1,j,k,l}=f_{i,j,k,l} \times \frac {1} {j+k+l+1}$

若攻击到 $1$ 血奴隶主,则触发转移$f_{i+1,j-1,k,l}=f_{i,j,k,l} \times \frac{j} {j+k+l+1}$

若攻击到 $2$ 血奴隶主,则再分两种情况,当$j+k+l<7$时触发转移$f_{i+1,j+1,k-1,l+1}=f_{i,j,k,l} \times \frac {k} {j+k+l+1}$ ; 否则触发转移 $f_{i+1,j+1,k-1,l}=f_{i,j,k,l} \times \frac {k} {j+k+l+1}$

若攻击到 $3$ 血奴隶主则与 $2$ 血奴隶主类似,$j+k+l<7$时触发$f_{i+1,j,k+1,l}=f{i,j,k,l} \times \frac {l} {j+k+l+1}$ ;否则为$f_{i+1,j,k+1,l-1}=f_{i,j,k,l} \times \frac {l} {j+k+l+1}$

然后写代码的时候控制好循环就可以了w循环时要保证 $j+k+l \leq 7$

参考代码

GitHub

 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> double dp[][][][]; double DFS(int,int,int,int); int main(){
int t;
int n,a,b,c;
double tmp;
scanf("%d",&t);
while(t--){
memset(dp,,sizeof(dp));
scanf("%d%d%d%d",&n,&a,&b,&c);
dp[][a][b][c]=;
double ans=;
for(int i=;i<=n;i++){
for(int j=;j<=;j++){
for(int k=;k+j<=;k++){
for(int l=;l+k+j<=;l++){
tmp=1.0/double(j+k+l+);
dp[i+][j][k][l]+=dp[i][j][k][l]*tmp;
if(j>)
dp[i+][j-][k][l]+=dp[i][j][k][l]*tmp*j;
if(k>){
if(l+j+k<)
dp[i+][j+][k-][l+]+=dp[i][j][k][l]*tmp*k;
else
dp[i+][j+][k-][l]+=dp[i][j][k][l]*tmp*k;
}
if(l>){
if(l+j+k<)
dp[i+][j][k+][l]+=dp[i][j][k][l]*tmp*l;
else
dp[i+][j][k+][l-]+=dp[i][j][k][l]*tmp*l;
}
if(dp[i][j][k][l]>)
ans+=dp[i][j][k][l]*tmp;
}
}
}
}
printf("%.2lf\n",ans);
}
return ;
}

Backup

然后放图w

[BZOJ 4832][lydsy 4月赛] 抵制克苏恩的更多相关文章

  1. 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)

    4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 275  Solved: 87 Descripti ...

  2. [Bzoj4832][Lydsy2017年4月月赛]抵制克苏恩 (期望dp)

    4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 673  Solved: 261[Submit][ ...

  3. [补档][Lydsy2017年4月月赛]抵制克苏恩

    [Lydsy2017年4月月赛]抵制克苏恩 题目 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平. 如果你不玩炉石传说,不必担心,小Q同学会告诉你所有相关的细节.炉石传说是这样的一 ...

  4. 【BZOJ4832】[Lydsy2017年4月月赛]抵制克苏恩 概率与期望

    [BZOJ4832][Lydsy2017年4月月赛]抵制克苏恩 Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q同学会告诉 ...

  5. bzoj 4974: [Lydsy八月月赛]字符串大师

    4974: [Lydsy八月月赛]字符串大师 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 371  Solved: 190[Submit][Statu ...

  6. bzoj 4921: [Lydsy六月月赛]互质序列

    4921: [Lydsy六月月赛]互质序列 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 188  Solved: 110[Submit][Status ...

  7. BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)

    题目链接 \(f[s][i][j][k]\)表示还剩\(s\)次攻击,分别有\(i,j,k\)个血量为\(1,2,3\)的奴隶主时,期望受到伤害. 因为期望是倒推,所以这么表示从后往前求,注意\(a, ...

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

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

  9. BZOJ4832[Lydsy1704月赛]抵制克苏恩——期望DP

    题目描述 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q 同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 30 点血量的 ...

随机推荐

  1. Overfitting&Underfitting Problems

    这次根据结合Google的翻译果然速度快上许多,暂时休息,晚上在传一个exm2的随笔. 关于过度拟合下的问题 考虑从x∈R预测y的问题,下面的最左边的图显示了将\(y=\theta_0+\theta_ ...

  2. 使用CSS3动画实现绚丽的照片墙效果

    临近毕业了,一大波毕业照又要来袭了!如何使用CSS3属性制作出自己的网页版照片墙呢? 闲话少说,先来看看效果图 效果要求: 1,照片要求有一定的白色边框. 2,照片都要有一定的倾斜角度. 3,鼠标移动 ...

  3. oracle 10G 没有 PIVOT 函数怎么办,自己写一个不久有了

    众所周知,静态SQL的输出结构必须也是静态的.对于经典的行转列问题,如果行数不定导致输出的列数不定,标准的答案就是使用动态SQL, 到11G里面则有XML结果的PIVOT. 但是 oracle 10G ...

  4. vue组件(Vue+webpack项目实战系列之三)

    组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.特别对于大型应用开发来说,尽量组件化,并且先造好轮子库,不要重复去写组件,这会显著提升项目 ...

  5. airdrop-ng/aircrack-ng

    找了很久,才找到安装方法跟使用,特此记录下来首先要安装好airodump-ng 1.2 beat那个版本我安装的前提是 airodump mon0 可以试用了.今天就不写airodump-ng安装了, ...

  6. ASP.NET Core 源码学习之 Options[1]:Configure

    配置的本质就是字符串的键值对,但是对于面向对象语言来说,能使用强类型的配置是何等的爽哉! 目录 ASP.NET Core 配置系统 强类型的 Options Configure 方法 源码解析 ASP ...

  7. 远程连接mysql 授权方法详解

    今在服务器上 有mysql 数据库,远程访问,不想公布root账户,所以,创建了demo账户,允许demo账户在任何地方都能访问mysql数据库中shandong库. 方案一: 在安装mysql的机器 ...

  8. Linux下pecl命令无法执行的解决

    pecl install swoole 提示如下错误:bash: pecl: command not found执行yum install php-pear生效

  9. 使用c#解析json库

    写了个c#版的json解析库,提供了json到hashtable以及hashtable到json字符串的转换 受惠于c#的语法特性,hashtable到json的解析变得非常简单 先判断传入的obje ...

  10. Bootstrap警告框

    前面的话 在网站中,网页总是需要和用户一起做沟通与交流.特别是当用户操作上下文为用户提供一些有效的警示框,比如说告诉用户操作成功.操作错误.提示或者警告等.在Bootstrap框架有一个独立的组件,实 ...