「刷题」可怜与STS
又是一道假期望,我们发现一共有$ 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的更多相关文章
- 「刷题」THUPC泛做
刷了一下,写一下. T1. 天天爱射击 可以这样想. 我们二分一下每一块木板在什么时刻被击碎. 然后直接用主席树维护的话是\(O(nlog^2n)\)的. 会\(T\),而且是一分不给那种... 那么 ...
- 「刷题」JZPKIL
这道反演题,真牛逼. 以下用$B$代表伯努利数,$l*g=f$代表狄利克雷卷积,先推式子. 对于给出的$n,x,y$求一百组数据的$ans$ $\begin{array}{rcl} ans & ...
- 「刷题」Triple
正解是普通型母函数+FFT. 才学了多项式,做了一道比较好的题了. 首先有三个斧子被偷了. 我们考虑构造一种普通型母函数. 就是说一种多项式吧,我的理解. 系数是方案,下标,也就是所谓的元指数代表的是 ...
- 「刷题」xor
说实话这道题没有A掉,不过所有的思路都是我自己想的,我觉得这个思路真的很棒很棒很棒的. 首先这个题的题面描述告诉我这种运算有封闭性,满足结合律和交换率,那么其实这个东西是个群运算了,而且这个群有单位元 ...
- 「刷题」GERALD07加强版
是LCT了. 首先我们不知道联通块怎么数. 然后颓标签知道了是LCT. 那么考虑一下怎么LCT搞. 有一个很普遍的思路大家也应该都知道,就是如何求一个区间中某种颜色的个数. 这个可以很简单的用主席树来 ...
- 「刷题」Color 群论
这道题乍一看挺水的,直接$ Ploya $就可以了,可是再看看数据范围:n<=1e9 那就是有1e9种置换,这不歇比了. 于是考虑式子的优化. 首先证明,转i次的置换的每个循环结大小是 $ gc ...
- 「刷题」卡特兰数&prufer序列
1.网格 转换模型,翻折容斥出解. 2.有趣的数列 抽象一下模型,把奇数项当作横坐标,偶数项当作纵坐标,就是从n*n矩阵左下角走到右上角并且每一步x<=y的方案数,发现是卡特兰数,关于gcd,可 ...
- 「刷题笔记」AC自动机
自动AC机 Keywords Research 板子题,同luoguP3808,不过是多测. 然后多测不清空,\(MLE\)两行泪. 板子放一下 #include<bits/stdc++.h&g ...
- 「刷题笔记」DP优化-状压-EX
棋盘 需要注意的几点: 题面编号都是从0开始的,所以第1行实际指的是中间那行 对\(2^{32}\)取模,其实就是\(unsigned\ int\),直接自然溢出啥事没有 棋子攻击范围不会旋转 首先, ...
随机推荐
- asp.net core过滤器记录响应对象
百度到的基本上就是读取response.body的流.然后记录完了之后,把流的index重新复位,这样也太麻烦了. 其实asp.net core团队肯定已经考虑到了这种需求,比如记录请求响应日志.给响 ...
- 在chrome浏览器中调用IE浏览器并访问(openIE.reg自定义协议)
在谷歌浏览器中有4种方法调用IE浏览器.如下: c++ socket通过浏览器在ie中打开指定url : vb生成exe,url访问exe启动ie并打开指定url : 通过socket实现通过http ...
- The Troublesome Frog
In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a well-deserved ...
- 各种常见文件的hex文件头
我们在做ctf时,经常需要辨认各种文件头,跟大家分享一下一些常见的文件头. 扩展名 文件头标识(HEX) 文件描述 123 00 00 1A 00 05 10 04 Lotus 1-2-3 spr ...
- SVM面试知识点总结
1. SVM 原理 SVM 是一种二类分类模型.它的基本思想是在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类,具体来讲,有三种情况(不加核函数的话就是个线性模型,加了之后才会升级为一个非线 ...
- 一次SSM项目记录
1.控制台输入 mvn archetype:generate -DgroupId=com.yjdev -DartifactId=myzone -DarchetypeArtifactId=maven-a ...
- Java零基础手把手系列:HashMap排序方法一网打尽
HashMap的排序在一开始学习Java的时候,比较容易晕,今天总结了一些常见的方法,一网打尽.HashMap的排序入门,看这篇文章就够了. 1. 概述 本文排序HashMap的键(key)和值(va ...
- 使用jmeter进行压力测试入门讲解
1.下载安装jmeter 略 我这里放上5.1版本的,有需要可以下载 链接:https://pan.baidu.com/s/1xRZZmTY4do1oDU_xPit94Q&shfl=share ...
- PHP array_udiff_uassoc
1.函数的参数:返回数组的差集.用定义的函数比较键值和值. 2.函数的参数: @params array $array @params array $array1 ... @params callab ...
- 运用第一性原理探寻AI本质
摘要:使用第一性原理探讨理解AI本质. 文章来源:宜信技术学院|宜信支付结算团队技术分享第二期-支付结算机器学习技术团队负责人 刘创 分享<AI与第一性原理> 分享者:宜信支付结算机器学习 ...