[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 点血量的 ...
随机推荐
- Scrapy爬虫大战京东商城
Scrapy爬虫大战京东商城 引言 上一篇已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇 代码详解 首先应该构造请求,这里使用scrapy.Request,这个方法默认调 ...
- ES6中的export以及import的使用多样性
模块功能主要由两个命令构成:export和import.export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能. 一.export导出模块使用部分的几种方式 一个模块就是一 ...
- 自己动手写一个自动登录脚本gg
1.下载一个sshpass工具 2.安装sshpass,安装到tools文件夹 3.把tools文件夹的路径加入到/etc/bashrc vim /etc/bashrc 最后一行 : expor ...
- Swift数组字面量
可以用一个数组字面量来初始化一个数组,简单地把一个或多个值放在一起就可以了.数组字面量的写法是一行用逗号隔开的值,并在行的两端用一对方括号包起来: [value , value , value ] 下 ...
- JAVA上传与下载
java下载指定地址的文件 package com.test; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...
- 【Android Developers Training】 102. 序言:让你的应用获知地点
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【No JSON object could be decoded】问题解决
本人使用爬虫从某数据库中下载了一批数据,本地存为json格式(pgp.json)然后使用python中的json模块进行解析(json.load),一直出现下述错误 从google中查找到了同样错误的 ...
- SpringEL 表达式错误记录
原因暂时未知....
- LCS 算法实现
动态规划算法 #include <iostream> #include <string.h> #include <algorithm> #include <m ...
- Logback 基础知识
1.Logback使用logback 是log4j的替代者,其需要slf4j.其配置文件主要有以下三种1. logback.groovy2. logback-test.xml3. logback.xm ...