题目大意:一开始有 $2n$ 张牌,每张牌上都写着一个数字 $w_i$,有两种的牌,每种类型各 $n$ 张:

1.攻击牌:打出后对对方造成牌上的数字的伤害。

2.强化牌:打出后,设数字为 $x$,则其他剩下的攻击牌的数字都会乘上 $x$。保证强化牌上的数字都大于$1$。

现在会等概率随机从卡组中抽出 $m$ 张牌,但最多打出 $k$ 张牌,假设会采取能造成最多伤害的策略,求她期望造成多少伤害。

题解:发现有若可以的话,先从大到小打强化牌,再从大到小打攻击牌(至少打一张),这样会造成最大伤害,然后我就不会了。。。

卡点:无

C++ Code:

#include <cstdio>
#include <algorithm>
#define maxn 3010
#define int long long
using namespace std;
const int mod = 998244353;
int Tim, n, m, k;
int a[maxn], b[maxn];
int fac[maxn], inv[maxn];
int f[maxn][maxn], g[maxn][maxn];
int sf[maxn][maxn], sg[maxn][maxn];
inline bool cmp(int a, int b) {return a > b;}
int C(int a, int b) {
if (b > a) return 0;
return fac[a] * inv[b] % mod * inv[a - b] % mod;
}
int F(int a, int b) {
if (a < b) return 0;
int ans = 0;
for (int i = 0; i <= n; i++) ans = (ans + f[b][i] * C(n - i, a - b)) % mod;
return ans;
}
int G(int a, int b) {
if (a < b) return 0;
int ans = 0;
for (int i = 0; i <= n; i++) ans = (ans + g[b][i] * C(n - i, a - b)) % mod;
return ans;
}
signed main() {
fac[0] = fac[1] = inv[0] = inv[1] = 1;
for (int i = 2; i <= maxn; i++) {
fac[i] = fac[i - 1] * i % mod;
inv[i] = inv[mod % i] * (mod - mod / i) % mod;
}
for (int i = 2; i <= maxn; i++) inv[i] = inv[i] * inv[i - 1] % mod;
scanf("%lld", &Tim);
while (Tim --> 0) {
scanf("%lld%lld%lld", &n, &m, &k);
for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
sort(a + 1, a + n + 1, cmp);
f[0][0] = 1;
for (int i = 0; i <= n; i++) sf[0][i] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
f[i][j] = a[j] * sf[i - 1][j - 1] % mod;
sf[i][j] = (sf[i][j - 1] + f[i][j]) % mod;
}
}
for (int i = 1; i <= n; i++) scanf("%lld", &b[i]);
sort(b + 1, b + n + 1, cmp);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
g[i][j] = (b[j] * C(j - 1, i - 1) + sg[i - 1][j - 1]) % mod;
sg[i][j] = (sg[i][j - 1] + g[i][j]) % mod;
}
}
int ans = 0;
for (int i = 0; i <= m; i++) {
if (i < k) ans = (ans + F(i, i) * G(m - i, k - i)) % mod;
else ans = (ans + F(i, k - 1) * G(m - i, 1)) % mod;
}
printf("%lld\n", ans);
}
return 0;
}

  

[LOJ #2538][PKUWC 2018]Slay the Spire的更多相关文章

  1. LOJ #2538. 「PKUWC 2018」Slay the Spire (期望dp)

    Update on 1.5 学了 zhou888 的写法,真是又短又快. 并且空间是 \(O(n)\) 的,速度十分优秀. 题意 LOJ #2538. 「PKUWC 2018」Slay the Spi ...

  2. loj #2538. 「PKUWC2018」Slay the Spire

    $ \color{#0066ff}{ 题目描述 }$ 九条可怜在玩一个很好玩的策略游戏:Slay the Spire,一开始九条可怜的卡组里有 \(2n\) 张牌,每张牌上都写着一个数字\(w_i\) ...

  3. LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)

    写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...

  4. LOJ #2541. 「PKUWC 2018」猎人杀(容斥 , 期望dp , NTT优化)

    题意 LOJ #2541. 「PKUWC 2018」猎人杀 题解 一道及其巧妙的题 , 参考了一下这位大佬的博客 ... 令 \(\displaystyle A = \sum_{i=1}^{n} w_ ...

  5. LOJ #2540. 「PKUWC 2018」随机算法(概率dp)

    题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 ...

  6. PKUWC 2018游记

    PKUWC 2018游记 标签: Day\([-inf,0)\) 停课之后一直各种浪的飞起,考试rank20+,不搞颓但是学习很没有状态.还经常带着耳机被谢总抓了好几次,然后被拉过去谈话了好几次... ...

  7. PKUWC 2018 铁牌记

    Day –INF: 联赛后根据分数一部分人继续停课.由于本蒟蒻撞上了狗屎运,联赛分数还行,可参加NOIWC和PKUWC,故继续停课训练.期间补全了一堆知识点,并成功翘掉期末考.(然而该还的还是要还的, ...

  8. A Dream (PKUWC 2018)

    A Dream (PKUWC 2018) 这是一个梦. 从没有几分节日气氛的圣诞,做到了大雪纷飞的数九寒天. 忘了罢! 不记得时间,不记得地点.随着记忆的褪去,一切也只会不复存在. Day-34? D ...

  9. $PkuWc\ 2018$ 酱油记

    PkuWc 2018 酱油记 1. Day -INF 又停了一个月课...... 感觉这个月的收获还是蛮大的,刚来的时候还只会线段树,到现在LCT都学了... 这个月不停在考试,自己考试技巧也提升了不 ...

随机推荐

  1. CentOS7.2中安装MongoDB

    MongoDB是由C++编写的NoSQL的分布式文件数据库,用的json格式的k-value存储方式. MongoDB官网 https://www.mongodb.com 一.下载和安装 下载完后文件 ...

  2. hadoop2.5.0 HA高可用配置

    hadoop2.5.0 HA配置 1.修改hadoop中的配置文件 进入/usr/local/src/hadoop-2.5.0-cdh5.3.6/etc/hadoop目录,修改hadoop-env.s ...

  3. 第一个网页(仿照当当网,仅仅使用CSS)

    这个网页是在学过CSS之后,对当当网首页进行模仿的网页,没有看当当网的网页源码,纯按照自己之前学的写的,由于是刚学过HTML和CSS才一个星期,所以里面有许多地方写的非常没有水平,仅仅用来学习使用,欢 ...

  4. Python入门及容易!网摘分享给大家!

    Python:Python学习总结 背景 PHP的$和->让人输入的手疼(PHP确实非常简洁和强大,适合WEB编程),Ruby的#.@.@@也好不到哪里(OO人员最该学习的一门语言). Pyth ...

  5. Python正则表达式中的re.S,re.M,re.I的作用

    正则表达式可以包含一些可选标志修饰符来控制匹配的模式.修饰符被指定为一个可选的标志.多个标志可以通过按位 OR(|) 它们来指定.如 re.I | re.M 被设置成 I 和 M 标志: 修饰符 描述 ...

  6. Android开发——View动画、帧动画和属性动画详解

    0. 前言   Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图 ...

  7. ExtJs工具篇(3)——Aptana Studio3乱码的问题

            在Aptana Studio里面使用,发现输入的中文是乱码,在浏览器中浏览也是乱码,想着肯定是编码的问题,但是一直没有找到在那个地方设置.以为汉化后就可以了,没想到汉化后竟然还是乱码, ...

  8. Bash中使用MySQL导入导出CSV格式数据[转]

    转自: http://codingstandards.iteye.com/blog/604541 MySQL中导出CSV格式数据的SQL语句样本如下:   select * from test_inf ...

  9. oracle 认识

    有一家叫甲骨文的粮店,老板很严谨,为了防止仓库的粮食在买入卖出的时候发生问题,他制订一套流程,首先进出仓库的每一旦粮食都要求有一个编号(SCN),而且出入库之前必须先放到一个平台上(buffer ca ...

  10. jmeter操作JDBC

    1. 依次添加计划.线程组.JDBC Connection Configuration.JDBC Request.HTTP请求.Debug Sampler.察看结果树 在计划中导入mysql的jdbc ...