[HNOI 2015] 亚瑟王

题意

  有 n 张卡牌, 第 i 张卡牌有系数 p[i], d[i] .

  一局游戏有 r 轮.

  每轮从前往后遍历没有发动的卡牌, 每张卡牌有 p[i] 的概率发动.

  若发动了这张卡牌, 那么会给敌方造成 d[i] 的伤害, 同时这张卡牌销毁, 并结束这一轮.

  求一局游戏下来的期望伤害.

  n <= 250, r <= 150, 0 < p[i] < 1, 1 <= d[i] <= 1000 .

分析

  设 f[i][j] 表示第 i 张卡牌, 剩余 j 次机会的概率.

  边界为 $f[1][r] = 1$ .

  答案为 $\sum_{i = 1} ^ n \sum_{j = 1} ^ r d[i] \times f[i][j] \times (1 - {(1 - p_i)} ^ j)$ .

  转移为:

    第 i 张牌未发动: $f[i][j] \times {(1 - p_i)} ^ j \rightarrow f[i+1][j]$ .

    第 i 张牌发动了: $f[i][j] \times (1 - {(1 - p_i)} ^ j) \rightarrow f[i+1][j-1]$ .

实现

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cctype>
 5 #include <cmath>
 6 #define F(i, a, b) for (register int i = (a); i <= (b); i++)
 7 #define db double
 8 inline int rd(void) {
 9     int f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == ‘-‘) f = -1;
10     int x = 0; for (; isdigit(c); c = getchar()) x = x*10+c-‘0‘; return x*f;
11 }
12
13 const int N = 250;
14 const int R = 150;
15
16 int n, r, d[N]; db p[N], Pow[N][R];
17 db f[N][R], sum;
18
19 int main(void) {
20     #ifndef ONLINE_JUDGE
21         freopen("authur.in", "r", stdin);
22     #endif
23
24     for (int nT = rd(), t = 1; t <= nT; t++) {
25         memset(p, 0, sizeof p), memset(d, 0, sizeof d);
26         n = rd(), r = rd();
27         F(i, 1, n) scanf("%lf", p+i), d[i] = rd();
28
29         F(i, 1, n) {
30             Pow[i][0] = 1;
31             F(j, 1, r) Pow[i][j] = Pow[i][j-1] * (1 - p[i]);
32         }
33
34         memset(f, 0, sizeof f), sum = 0, f[1][r] = 1;
35         F(i, 1, n-1)
36             F(j, 1, r) {
37                 f[i+1][j] += Pow[i][j] * f[i][j];
38                 f[i+1][j-1] += (1 - Pow[i][j]) * f[i][j];
39             }
40         F(i, 1, n)
41             F(j, 1, r)
42                 sum += d[i] * f[i][j] * (1 - Pow[i][j]);
43         printf("%0.10lf\n", sum);
44     }
45
46     return 0;
47 }
时间: 2024-10-10 16:26:15

[HNOI 2015] 亚瑟王的相关文章

[HNOI2015]亚瑟王

题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的. 作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共 n张.游戏时,玩家将

亚瑟王(bzoj 4008)

Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的.作为一个非 洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已 经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一 下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共

洛谷P1930 亚瑟王的宫殿 Camelot

P1930 亚瑟王的宫殿 Camelot 19通过 53提交 题目提供者JOHNKRAM 标签USACO 难度提高+/省选- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 很久以前,亚瑟王和他的骑士习惯每年元旦去庆祝他们的友谊.为了纪念上述事件, 我们把这些故事看作是一个棋盘游戏.有一个国王和若干个骑士被放置在一个由许多方格 组成的棋盘上,没有两个骑士在同一个方格内. 这个例子是标准的 8*8 棋盘 国王可以移动到任何一个相邻的方格,从下图中黑子位置到下图中白子位置前提是他 不掉出棋盘

BZOJ 4008: [HNOI2015]亚瑟王( dp )

dp(i, j)表示考虑了前i张牌, 然后还有j轮的概率. 考虑第i+1张牌: 发动的概率 : p = dp(i, j) * (1 - (1-p[i+1])^j) 没发动的概率 : dp(i, j) * (1 - p[i+1])^j 分别转移到状态: dp(i+1, j-1) dp(i+1, j) 同时假如i+1发动了对答案还有贡献p*d(i+1) 时间复杂度O(NTR) (好像有点不和谐..... ------------------------------------------------

[洛谷 P3239] [HNOI2015]亚瑟王

[HNOI2015]亚瑟王 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的. 作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌

[BZOJ 4008][HNOI2015]亚瑟王(期望Dp)

Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的.作为一个非 洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已 经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一 下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共

【BZOJ-4008】亚瑟王 概率与期望 + DP

4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 832  Solved: 515[Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的.作为一个

bzoj4008: [HNOI2015]亚瑟王

Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的.作为一个非 洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已 经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一 下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共

BZOJ 4008 【HNOI2015】 亚瑟王

题目链接:亚瑟王 这道题好神啊TAT--果然我的dp还是太弱了-- 一开始想了半天的直接dp求期望,结果最后WA的不知所云-- 最后去翻了题解,然后发现先算概率,再求期望--新姿势\(get\). 我们不妨把\(r\)轮看做\(r\)次出牌机会,然后令\(f_{i,j}\)表示考虑完前\(i\)张牌,还剩\(j\)次机会的概率. 然后我们对第$i$张牌,枚举还剩几次机会,单独考虑一下: 若这张牌没有发动,那么概率为$f_{i-1,j}*(1-p_i)^j$ 若这张牌在剩下的$j$轮发动,由于每张