[BZOJ 4832][lydsy 4月赛] 抵制克苏恩
题面贴一发
[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 1Sample 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$
参考代码
#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月赛] 抵制克苏恩的更多相关文章
- 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)
4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 275 Solved: 87 Descripti ...
- [Bzoj4832][Lydsy2017年4月月赛]抵制克苏恩 (期望dp)
4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 673 Solved: 261[Submit][ ...
- [补档][Lydsy2017年4月月赛]抵制克苏恩
[Lydsy2017年4月月赛]抵制克苏恩 题目 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平. 如果你不玩炉石传说,不必担心,小Q同学会告诉你所有相关的细节.炉石传说是这样的一 ...
- 【BZOJ4832】[Lydsy2017年4月月赛]抵制克苏恩 概率与期望
[BZOJ4832][Lydsy2017年4月月赛]抵制克苏恩 Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q同学会告诉 ...
- bzoj 4974: [Lydsy八月月赛]字符串大师
4974: [Lydsy八月月赛]字符串大师 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 371 Solved: 190[Submit][Statu ...
- bzoj 4921: [Lydsy六月月赛]互质序列
4921: [Lydsy六月月赛]互质序列 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 188 Solved: 110[Submit][Status ...
- BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)
题目链接 \(f[s][i][j][k]\)表示还剩\(s\)次攻击,分别有\(i,j,k\)个血量为\(1,2,3\)的奴隶主时,期望受到伤害. 因为期望是倒推,所以这么表示从后往前求,注意\(a, ...
- 【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp
打记录的题打多了,忘了用开维记录信息了......我们用f[i][j][l][k]表示已经完成了i次攻击,随从3血剩j个,2血剩l个,1血剩k个,这样我们求出每个状态的概率,从而求出他们对答案的贡献并 ...
- BZOJ4832[Lydsy1704月赛]抵制克苏恩——期望DP
题目描述 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩炉石传说,不必担心,小Q 同学会告诉你所有相关的细节.炉石传说是这样的一个游戏,每个玩家拥有一个 30 点血量的 ...
随机推荐
- Bash函数
一.什么是Bash函数 Bash不支持goto语句,可以用function实现程序流程跳转.当前shell中一组组织在一起并被命名的命令.比脚本的效率高,一旦定义,就成为shell内存的一部分,可以随 ...
- ecshop调用指定分类和个数的文章列表
举例如首页调用方法: 1.先打开index.php文件找到以下代码: $smarty->assign('new_articles', index_get_new_articles()); // ...
- IBM的人工智能“沃森”首次确诊罕见白血病,只用了10分钟!
患者为一名60岁的女性,最初根据诊断结果,显示她患了急髓白血病.但在经历各种疗法后,效果并不明显. 根据东大医学院研究人员Arinobu Tojo的说法,他们利用Watson系统来对此病人进行诊断.系 ...
- 关于MATLAB处理大数据坐标文件2017528
第一次提交数据 增加了部分特征 3000数据测试中得分99 但是10万数据出现过拟化现象,正确率下降 总结:1.某些特征数据本身波动不大应该考虑放弃 2.一些特征虽然表面觉得差异显而易见,但是数据表达 ...
- 9天C#转Java学习过程,自己记录一下
其实没有完整的9天,就是连续每天花点时间,过程so frustrated,踩坑无数...下面是学习过程的记录 第1天 开始正式学习JavaEE,已完成: 1. Tomcat安装: 2. Tomcat配 ...
- H5个性三级联动日期插件(一)
1. 先看效果:如图 2.如果跟你的需求一样的话,那就抓紧down(当)起来吧! 首先你的页面可能需要很多的开发需求文件: jquery,mobiscroll 等js框架插件等 自己参照官方的demo ...
- java数组中取出最大值
class Demo{ public static void main(String []args){ int[] arr={3,54,456,342,2798}; int max=getMax(ar ...
- pouchdb-find( pouchdb查询扩展插件 ,便于查询)
pouchdb-find pouchdb-find 环境搭建 下载lib bower install pouchdb-find 引入js <script src="pouchdb.js ...
- C++ 派生类到基类转换的可访问性
今天看c++ primer关于派生类到基类转换的可访问性,看的很晕,看了下面的文章恍然大悟: http://www.2cto.com/kf/201403/283389.html C++ primer第 ...
- 使用阿里百川HotFix
前言:首先要弄懂HotFix是干嘛的,不然就别向下看了.这里仅仅根据官方文档的代码书写,亲测可用,不做理论指导. Android Studio集成: 添加maven仓库地址: repositories ...