ZJOI2019做题笔记
麻将(期望、DP套DP)
先考虑如何计算一个子集是否能胡。
设\(f_{i,0/1,j,k}\)表示考虑了子集中\(1 \sim i\)的牌,是否找到对子,\(i-1,i,i+1\)预计拿\(j\)个,\(i,i+1,i+2\)预计拿\(k\)个,最多能够产生多少面子。注意到\(j\)和\(k\)的状态都是预计,所以并不算入面子数。转移枚举有多少个\(i+1\)、预计拿多少个\(i+1,i+2,i+3\)的顺子,剩下的全部拿刻子。至于为什么考虑\(i+1,i+2,i+3\)而不是\(i-1,i,i+1\)是因为这样边界比较好算。
然后考虑原问题。发现原问题相当于:对于手中摸了\(i(i \geq 13)\)张牌,考虑这些牌有没有胡的子集,如果没有贡献+1,然后再摸一张。所以我们只需要计算满足摸了\(i\)张还没有胡的子集的方案数,然后乘上\((4n-i)!\)加起来就是所有排列的权值总和。
后面的问题仍然可以从小到大枚举牌来DP。考虑将上面\(f\)的状态压进当前DP状态里,设\(g_{i,j,k}\)表示考虑了前\(i\)种牌,共拿了\(j\)张牌,\(f\)数组的状态为\(k\)时的方案数,转移枚举\(i+1\)选了多少个,转移一下\(k\)即可。
最后的问题是\(k\)的状态量,暴搜可以搜出本质不同的不胡状态总共有\(2091\)种,所以复杂度为\(O(2091n^2)\)可以通过。
线段树(期望、线段树、矩阵)
原题可以等价转化为:一棵线段树有\(0.5\)的几率打一个标记,有\(0.5\)的几率不打,问标记个数期望。
设\(f_{i,0/1/2}\)表示第\(i\)个点,它和它的祖先都不存在标记/它的祖先存在标记,它不存在标记/它存在标记的期望。转移分:经过的点、pushdown到达的点、打上标记的点、祖先打上标记的点四种情况分别乘上一个矩阵转移,最后的答案就是所有的\(f_{i,2}\)的和。
可能需要一定的常数优化。可以发现\(f_0+f_1+f_2 = 1\),所以可以压掉一个变成\(2 \times 2\)。
Minimax搜索(动态DP)
对于一个已知的集合\(S\),如果通过\(w(S)\)将根节点权值变为\(W+x\),那也一定可以变为\(W+1\);能够变为\(W-x\),也一定能够变为\(W-1\)。所以我们只需要考虑将根节点变为\(W \pm 1\)的能量消耗。
首先,如果集合中存在\(W\)号点,那么它的权值一定为\(1\),因为只需把\(W\)修改成\(W \pm 1\)就可以改变根节点的值。所以若设\(ans_i\)表示\(k \leq i\)的答案的和,那么\(ans_1 = 2^{m-1}\),由题意可知\(ans_n = 2^m - 1\)。对于接下来考虑的所有集合,均认为它们不包含\(W\)号点。
我们枚举一个\(k \in [L,R]\)考虑计算\(ans_k\)。对于一个集合\(S\),如果想让根节点权值变为\(W+1\),那么编号\(\geq W+1\)的点的权值不需要变化,而\(<W\)的点的权值在改变量不超过\(k\)的情况下变为\(W+1\)一定是最优的;而变为\(W-1\),则只让\(>W\)的点在改变量不超过\(k\)的情况下把权值变为\(W-1\)。那么也就是说:一个集合中让根节点权值变为\(W+1\)需要修改的点和让根节点权值变为\(W-1\)需要修改的点是独立的,所以不满足条件的方案数就是:选择一些\(<W\)的点,将它们修改为\(W+1\)之后根节点权值不变;选择一些\(>W\)的点,将它们修改为\(W-1\)之后根节点权值不变,这两种方案的乘积。
那么可以设计一个\(dp\):设\(f_i\)表示仅改变编号\(<W\)的点的权值,点\(i\)的权值\(\leq W\)的概率。至于为什么是概率,因为后面好算。又设\(g_i\)表示仅改变编号\(>W\)的点的权值,点\(i\)的权值\(<W\)的概率。这两种dp的转移都是一样的,如果\(2 \not\mid dep_u\)则\(f_u = \prod f_v\),否则是\(f_u = 1 - \prod (1 - f_v)\),其中\(v\)是\(u\)的儿子。
那么\(ans_k = 2^{m-1} + 2^{m-1}(1 - f_1(1 - g_1))\)。对于每一个\(k \in [L-1,R]\)算一下答案,就有一个70pts的DP。
然后可以发现:当\(k\)从\(i\)变到\(i+1\)的时候,至多有一个叶子会在\(f\)中改变值,至多有一个叶子在\(g\)中改变值,所以动态DP。
具体的,令\(f'_v = [2 \not\mid dep_v]f_v + [2 \mid dep_v](1 - f_v)\),那么\(f'\)的转移就变成了统一的\(f'_u = \prod (1 - f'_v)\)。然后设\(x^i\)表示树链剖分后\(x\)所在重链深度为\(dep_x + i\)的点,那么一段重链的转移可以写成\(f_{top} = \sum\limits_{i=0}^{dep} (-1)^i \prod\limits_{j=0}^i ldp_{top^j}\),其中\(ldp\)表示的是轻边传上来的答案,至于怎么推直接暴力拆式子。这个式子的值可以通过每条重链维护一棵线段树求。
最后动态DP撤销贡献的时候有可能会除\(0\),所以对于每一个数记一下非\(0\)的数的乘积和乘\(0\)次数,就可以做到除法。
ZJOI2019做题笔记的更多相关文章
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
- C语言程序设计做题笔记之C语言基础知识(上)
C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...
- SDOI2017 R1做题笔记
SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30
- SDOI2014 R1做题笔记
SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(
- SDOI2016 R1做题笔记
SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...
- LCT做题笔记
最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...
- java做题笔记
java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...
- SAM 做题笔记(各种技巧,持续更新,SA)
SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...
- PKUWC/SC 做题笔记
去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...
随机推荐
- 设计模式总结篇系列:适配器模式(Adapter)
网上看到不少关于适配器模式的讲解,其中对于适配器模式解释的过于专业,一时不是特别理解适配器模式到底是用来干嘛的,具体的适用场景在哪,其最精髓的地方到底在哪. 本文结合自己的理解,阐述下对适配器模式的看 ...
- PC逆向之代码还原技术,第二讲寻找程序入口点
PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...
- Java开发知识之Java的数字处理类Math类
Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...
- Java实现将任何编码方式的txt文件以UTF-8编码方式转存
本文利用JDK中的BufferedReader和BufferedWriter实现将任何编码方式的txt文件以UTF-8编码方式转存. UTF-8(8-bit Unicode Transformatio ...
- Mybatis sql映射文件浅析 Mybatis简介(三)
简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML为载体映射SQL 之前提到过,各项配置信息将Mybatis应用的整 ...
- #1 爬虫:豆瓣图书TOP250 「requests、BeautifulSoup」
一.项目背景 随着时代的发展,国人对于阅读的需求也是日益增长,既然要阅读,就要读好书,什么是好书呢?本项目选择以豆瓣图书网站为对象,统计其排行榜的前250本书籍. 二.项目介绍 本项目使用Python ...
- Angularjs进阶笔记(2)-自定义指令中的数据绑定
有关自定义指令的scope参数,网上很多文章都在讲这3种绑定方式实现的效果是什么,但几乎没有人讲到底怎么使用,本篇希望聊聊到底怎么用这个话题. 一. 自定义指令 自定义指令,是Angularjs用来实 ...
- Spring(二)继承jdbcDaoSupport的方式实现(增删改查)
一 首先创建数据库表和相应的字段,并创建约束 二 建立项目,导入jar包(ioc,aop,dao,数据库驱动,连接池)并且将applicationContext.xml文件放在src下 三 开启组件扫 ...
- Simditor 富文本编辑器多选图片上传、视频连接插入
simditor 是一个基于浏览器的所见即所得的文本编辑器.Simditor 富文本编辑器, 支持多选图片上传, 视频连接插入, HTML代码编辑以及常用富文本按钮,支持的浏览器:IE10.Firef ...
- Go开发之路 -- 函数详解
声明语法 func 函数名 (参数列表) [(返回值列表)] {} Golang函数特点 a. 不支持重载,一个包不能有两个名字一样的函数 b. 函数是一等公民,函数也是一种类型,一个函数可以赋值给变 ...