又是一道假期望,我们发现一共有$ C_{2n}^m $种情况。

而$ \frac{(2n)!}{m!(2n-m)!}=C_{2n}^m $

其实结果就是各个情况总伤害。

1.10分算法,爆搜10分。

2.30分算法,发现20%的攻击牌数值相同,这样先强化后攻击(至少留一张攻击牌)是最优策略。计算拿到$i$张强化牌,最小是第$j$张的情况下强化乘积和,乘上攻击牌的大小即可。

3.50分算法,发现20%的$m==k$,这样不用考虑出牌策略,先强化后攻击即可,分别计算拿到$i$张强化牌,最小是第$j$张的情况下的强化乘积和以及拿到$i$张攻击牌,最小是第j张的情况下的攻击和。两部分分别相乘即可。

4.$AC$算法,考虑最优策略的通解。发现每张强化牌至少会让所有的攻击牌数值翻倍,那么如果我选择只打最大的一张攻击牌的话,即使被一张最小的强化牌占据一张出牌机会,也能够让最大的一张翻倍,这样贡献要大于打一张最大的攻击牌和一张第二大的攻击牌。也就是说对于每个位置,最小的强化牌的贡献都要大于第二大的攻击牌,那么最优策略就是,只打最大的一张攻击牌,剩下的位置留给强化牌从大到小打,最后打出这张攻击牌,这样的伤害是最大的。

有了这个决策之后,我们不妨$sort$牌组。

设$f[i][j]$为强化牌选了$i$张,最后一张也是最小一张选的是第$j$张牌的乘积和,$g[i][j]$为攻击牌选了$i$张,最后一张也是最小的一张选的是第j张牌的攻击和,$a_i$是第$i$张强化牌,$b_i$是第$i$张攻击牌。

初始化:$f[0][0]=1$;

方程:

  $ f[i][j]=a_i\sum \limits_{k=1}^{j-1} f[i-1][k] $

  $ g[i][j]=b_i C_{j-1}^{i-1} \sum \limits_{k=1}^{j-1} g[i-1][k] $

组合数的意思是之前有这么多种情况($j-1$张牌中选$i-1$张牌,每种情况转移到$g[i][j]$中都需要加上一个$b_i$),前缀和优化,是$ O(n^2) $

设$F[i][j]$为选$i$张强化牌,打出$j$张强化牌的乘积和,$G[i][j]$为选$i$张攻击牌,打出$j$张攻击牌的伤害和。

方程:

  $ F[i][j]=\sum \limits_{k=j}^n f[j][k] C_{n-k}^{i-j} $

  $ G[i][j]=\sum \limits_{k=j}^n g[j][k] C_{n-k}^{i-j} $

组合数的意思是这j张牌是我打出去的大牌,那么剩下的$ i-j $张必定不如之前的$ j $张优,也就是小于$ k $,而小于k的牌一共有$ n-k $张。

这样发现是$ O(n^3) $的,时间上无法承受,在观察答案。

我们要求的:

    $ ans=\sum \limits_{i=0}^{min(m-1,n)} F[i][min(i,k-1)] G[m-i][max(1,k-i)] $

这是根据最优策略制定的,也就是说$i$张强化牌做多打出$k-1$张,而$m-i$张攻击牌最少要打出一张。

我们发现函数$F$和函数$G$都取单点值,所以只需要计算最多$m$个值。

那么$F$和$G$的计算复杂度仍然是$ O(n^2) $

总的时间复杂度:$ O(Tn^2) $

问题得解。

「刷题」可怜与STS的更多相关文章

  1. 「刷题」THUPC泛做

    刷了一下,写一下. T1. 天天爱射击 可以这样想. 我们二分一下每一块木板在什么时刻被击碎. 然后直接用主席树维护的话是\(O(nlog^2n)\)的. 会\(T\),而且是一分不给那种... 那么 ...

  2. 「刷题」JZPKIL

    这道反演题,真牛逼. 以下用$B$代表伯努利数,$l*g=f$代表狄利克雷卷积,先推式子. 对于给出的$n,x,y$求一百组数据的$ans$ $\begin{array}{rcl} ans & ...

  3. 「刷题」Triple

    正解是普通型母函数+FFT. 才学了多项式,做了一道比较好的题了. 首先有三个斧子被偷了. 我们考虑构造一种普通型母函数. 就是说一种多项式吧,我的理解. 系数是方案,下标,也就是所谓的元指数代表的是 ...

  4. 「刷题」xor

    说实话这道题没有A掉,不过所有的思路都是我自己想的,我觉得这个思路真的很棒很棒很棒的. 首先这个题的题面描述告诉我这种运算有封闭性,满足结合律和交换率,那么其实这个东西是个群运算了,而且这个群有单位元 ...

  5. 「刷题」GERALD07加强版

    是LCT了. 首先我们不知道联通块怎么数. 然后颓标签知道了是LCT. 那么考虑一下怎么LCT搞. 有一个很普遍的思路大家也应该都知道,就是如何求一个区间中某种颜色的个数. 这个可以很简单的用主席树来 ...

  6. 「刷题」Color 群论

    这道题乍一看挺水的,直接$ Ploya $就可以了,可是再看看数据范围:n<=1e9 那就是有1e9种置换,这不歇比了. 于是考虑式子的优化. 首先证明,转i次的置换的每个循环结大小是 $ gc ...

  7. 「刷题」卡特兰数&prufer序列

    1.网格 转换模型,翻折容斥出解. 2.有趣的数列 抽象一下模型,把奇数项当作横坐标,偶数项当作纵坐标,就是从n*n矩阵左下角走到右上角并且每一步x<=y的方案数,发现是卡特兰数,关于gcd,可 ...

  8. 「刷题笔记」AC自动机

    自动AC机 Keywords Research 板子题,同luoguP3808,不过是多测. 然后多测不清空,\(MLE\)两行泪. 板子放一下 #include<bits/stdc++.h&g ...

  9. 「刷题笔记」DP优化-状压-EX

    棋盘 需要注意的几点: 题面编号都是从0开始的,所以第1行实际指的是中间那行 对\(2^{32}\)取模,其实就是\(unsigned\ int\),直接自然溢出啥事没有 棋子攻击范围不会旋转 首先, ...

随机推荐

  1. Kafka 学习笔记之 High Level Consumer相关参数

    High Level Consumer相关参数 自动管理offset auto.commit.enable = true auto.commit.interval.ms = 60*1000 手动管理o ...

  2. MongoDB 学习笔记之 分片和副本集混合运用

     分片和副本集混合运用: 基本架构图: 搭建详细配置: 3个shard + 3个replicat set + 3个configserver + 3个Mongos shardrsname Primary ...

  3. dedecms织梦二次开发报名表单模块插件安装及配置详细教程

    网上找了很多,都不是太满意,功能不全不全不说,还没有详细的安装配置教程,经过自己的折腾,成功了修改程序并配置成功,亲测,试用没有问题!所以,决定给大家出一个针对新手的详细教程. 废话不多,直接上干货. ...

  4. mvvm的初步思想

    1.Object.defineProperty(obj,key,desc); 用法:1.给对象新增属性和特性 2.修改对象属性值和特性 desc(属性特性): 1.enumerable:boolean ...

  5. sublime text2解决中文乱码,支持中文的设置方法

    步骤: 1.安装Sublime Package Control.        在Sublime Text 2上用Ctrl+-打开控制台并在里面输入以下代码,Sublime Text 2就会自动安装P ...

  6. 算法学习之剑指offer(四)

    题目1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) /** public class TreeNode { int val = 0; Tree ...

  7. 微信小程序学习总结

    微信小程序开发环境安装以及相关设置配置 微信小程序前端页面书写 微信小程序前端样式WXSS书写 微信小程序中事件 微信小程序自定义组件 微信小程序发起请求 微信小程序登入流程 微信小程序路由跳转 微信 ...

  8. 《深入理解Java虚拟机》-----第9章 类加载及执行子系统的案例与实战

    概述 在Class文件格式与执行引擎这部分中,用户的程序能直接影响的内容并不太多, Class文件以何种格式存储,类型何时加载.如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为,用户 ...

  9. cobalt strike笔记-CS与MSF,Armitage,Empire互转shell

    0x01 Metasploit派生shell给Cobaltstrike 生成木马: msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata ...

  10. Windows 批处理入门

    Windows 批处理入门   目录 本教程概述 用到的工具 标签 简介 1.命令简介 2.符号简介 3.语句结构 4.实例讲解 本教程概述 本课我们学习windows批处理 用到的工具 cmd.ex ...