[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 点血量的 ...
随机推荐
- idea live template高级知识, 进阶(给方法,类,js方法添加注释)(二)
上一篇文章(http://www.cnblogs.com/xzjxylophone/p/6994488.html) 是在 groovyScript中直接添加的代码,这个看起来是简单,粗暴,麻烦和不美观 ...
- iOS-Core-Animation-Advanced-Techniques(一)
视图(UIView)和图层(CALayer)的关系: 每一个UIview都有一个CALayer实例的图层属性,视图的职责就是创建并管理这个图层,以确保当子视图在层级关系中添加或者被移除的时候,他们关联 ...
- 关于MATLAB处理大数据坐标文件2017622
今天新提交了一次数据,总量达到10337个,本以为成绩会突飞猛进,没想到还是不如从前 但是已经找到人工鼠标轨迹的程序,有待完善,接下来兵分四路:找特征.决策树.完善人工轨迹程序,使其可以将生成的数据自 ...
- mkdirs自动创建文件夹
//保存路径 如file路径是E:\filer\a.jpg File toSaveFile=new File("filePath"); if(toSaveFile!=null){ ...
- 不让bat文件运行命令结束后cmd窗口自动关闭
方法1假设你的bat名字叫aaa.bat你可以新开一个bat,内容是start aaa.bat然后这个新的bat是不会自动关闭的 方法2要执行bat后不退出,可以在bat里的最后添加pause命令,暂 ...
- JAVA类型擦除
Java泛型-类型擦除 一.概述 Java泛型在使用过程有诸多的问题,如不存在List<String>.class, List<Integer>不能赋值给List<Num ...
- 【Android Developers Training】 37. 共享一个文件
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- jq-toggle
jq-toggle: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- Python3分析sitemap.xml抓取导出全站链接
最近网站从HTTPS转为HTTP,更换了网址,旧网址做了301重定向,折腾有点大,于是在百度站长平台提交网址,不管是主动推送还是手动提交,前提都是要整理网站的链接,手动添加太麻烦,效率低,于是就想写个 ...
- 手机端 图片的移动缩放旋转兼容touch
//缩放var initialScale = 1;var currentScale = 1;touch.on('#target', 'pinch', function (ev) { currentSc ...