Week One
2018.11.21:
1、[BZOJ 4868][SHOI 2017]
从后往前枚举最后位置即可,如果$A<B$,用尽可能多的$A$替换$B$操作
Tip:很大的$C$可能爆$longlong$,注意特判掉与$C$相乘超过上限的数!
2、[BZOJ 4872][SHOI 2017]
首先每个灯最多按一次,接下来发现正确按取集合唯一,只不过顺序任意
设$dp[i]$表示从正确按取$i$个到$i-1$个的期望次数,则有:
$dp[i]=\frac{i}{n}+\frac{n-i}{n}*(dp[i]+dp[i+1]+1)$,$res=\sum_{i=k+1}^{cnt} dp[i]$
Tip:注意最后答案加上$k$!
3、[BZOJ 4869][SHOI 2017]
EXT欧拉定理套路(题解传送门)
4、[BZOJ 4870][SHOI 2017]
矩阵快速幂(题解传送门)
2018.11.22:
1、[AGC 004F]
又是$Atcoder$的思维神题……(题解传送门)
2、[BZOJ 2326][P 3216]
递推式:$dp[i]=dp[i-1]*10^{dgt}+i$
$dgt$相同时明显可以上带常数项的矩阵快速幂,然后再根据$dgt$分个段就行了
Tip:看$hzwer$程序学了下慢速乘,就是为了防止爆$longlong$用快速幂的方式做乘法
3、[BZOJ 1560][P 4056]
这种题一般都能先推出一个性质:
由于无负权,$a-b-c$一定比$a-c$优
这样就能每次只从每列最下面转移,复杂度$O(n*m)$
不过如果将式子列出来发现是能$O(m*m)$斜率优化转移的:
$dp[i]=dp[j]-rowdist_j-(i-j)^2+w$,维护个上凸壳就行了
4、[BZOJ 1597][P 2900]
先将矩形排序去掉完全包含的矩形
发现剩下的矩形必然是$x$递增,$y$递减的,从而方便$dp$:
$dp[i]=min{dp[j]+a[i]*b[j+1]}$
将$dp[j]=y,dp[i]=b,-a[i]=k,b[j+1]=x$就能维护下凸壳斜率优化了
5、[BZOJ 4011][P 3244]
在$DAG$上单独考虑每个点选哪条来边即可,就是$\prod in[i]$
加了一条边去掉含环的情况即可:钦定环,方案数就是$\frac{\prod in[i]}{\prod in[cir[i]]}$
拓扑序$dp$或$dfs$算环都行
6、[BZOJ 3612][P 4104]
首先模型转换为取$k$个$[-n,n]$内不同的数和为0的方案数
接下来用整数划分$dp$来计算仅考虑正数时的方案数:
这个都不会系列,传送门
$dp[i][j]=dp[i-j][j]+dp[i-j][j-1]$,(前者为不含1,后者为恰好仅含1个1)
一般此类$dp$都按是否含1来转移!由于数不同,因此仅含1个1时要先铺一层
同时为了保证每个数在范围内,在$i>n$时每次都要减去恰有一个数为$n+1$时的方案数
(之所以值考虑$n+1$是因为每次选的数最多加1)
最后按照是否选$0$分类统计答案即可
2018.11.23:
1、[BZOJ 3611][P 4103]
虚树裸题,一般此类询问多但限定了询问点总和的题目考虑虚树,只利用询问点及其$LCA$
由于$n$个点的$LCA$个数最多为$n-1$个,则能保证虚树的复杂度为$\sum n$
(由于$lca(a,b)!=lca(a,c)$则$lca(b,c)=lca(a,c)$,则可通过每次一个$lca$至少合并两个点来证明)
这样此题用栈维护右链建出虚树后直接树形$dp$就行了
2、[BZOJ 1096][P 2120]
预处理出前缀和,然后斜率优化$dp$即可
3、[BZOJ 2436][P 1973]
一般此类多次询问必须有一项选/不选时最值的题目 都要预处理前/后缀情况!
此题先预处理出$pre[i][j],suf[i][j]$表示前/后$i$个时刻$A$选了$j$个时$B$最多选多少个
那么无限制下$res=max{min(i,pre[tot][i])}$
否则钦定一个包含$[x[i],y[i]]$的区间$[L,R]$都给$A$,再考虑两边的最优分配
设$f[L][R]$表示该区间最优解,枚举$A$在$[1,L]$中选了$k1$个,在$[R,tot]$中选了$k2$个
此时$f[L][R]=max{min(k1+k2+num[L][R],pre[L][k1]+suf[R][k2])}$
对于此类双变量最值先控制一个变量$k1$单调
发现在$k1$固定下的最优$k2$随$k1$增加而减少,从而利用该单调性做到$O(n^3)$算$f$
4、[BZOJ 1023][P 4244]
竟然还是第一次写仙人掌上$dp$……
对于仙人掌一般都是桥和环分别处理
设$f[i]$表示$i$向非父边方向延伸出的最长链,如果是桥则用$f[i]+f[to]+1$更新$res$
否则单独处理环:用$max(f[i]+f[j]+dist(i,j))$更新$res$(其中$dist$表示两点在环上的较短距离)
为了$O(n)$求最值,将环赋值一遍后用单调递减的单调栈维护$f[i]-i$
每次将距离超过一半的弹出,栈顶即使当前点的之前最优点
注意:
1、算完环后注意更新返回点的$f$值!
2、$tarjan$遇到已访问点用$dfn$而非$low$来更新!
5、[BZOJ 2002][P 2387]
$LCT$(题解传送门)
6、[BZOJ 3669][P 3203]
简化版$LCT$板子……
2018.11.23:
1、[BZOJ 2957][P 4198]
2018.11.26:
1、[BZOJ 3997][P 3203]
$Dilworth$定理+$dp$
2、[BZOJ 4871][SHOI2017]
大分类树形$dp$……
3、[AGC 006A]
4、[AGC 006B]
发现性质:有两个相邻的相同就能一直保持
因此构造$n-1,n$/$n,n+1$相同即可
2018.11.27:
1、[Codeforces 713C]
$codeforces$评论题解:传送门
2、[BZOJ 2743][P 4113]
3、[BZOJ 2809][P 1552]
4、[AGC 006C]
期望的线性性+置换
5、[AGC 006D]
2018.11.28:
1、[AGC 006E]
2、[AGC 006F]
3、[ARC 067C]
4、[ARC 067D]
5、[ARC 067E]
学了两天文化课……咕咕咕
2018.12.1:
1、[BZOJ 4873][SHOI2017]
最大权闭合子图
2018.12.2:
1、[P 2742]
练了下$Andrew$和$Graham$求凸包
2、[ZROI 503]
3、[ZROI 504]
4、[ZROI 505]
模拟赛题解见Contest Review
随机推荐
- JQuery的链式编程,隐式迭代是啥意思?
链式编程 1.好处 "一句话,链式编程可以省去很多重复的代码." 这话什么意思呢?举个例子. /*设置obj对象的两个属性*/ //普通做法是这样的 obj.name = '小明' ...
- 微信小程序开发(四)线程架构和开发步骤
线程架构 从前面的章节我们可以知道,.js文件是页面逻辑处理层.我们可以按需在app.js和page.js中添加程序在生命周期的每个阶段相应的事件.如在页面的onLoad时进行数据的下载,onShow ...
- 64_r3
rubygem-resque-cleaner-0.3.0-5.fc24.noarch.rpm 24-Sep-2016 22:26 22422 rubygem-resque-cleaner-doc-0. ...
- 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践
之前介绍过关于HBase 0.9.8版本的部署及使用,本篇介绍下最新版本HBase1.2.4的部署及使用,有部分区别,详见如下: 1. 环境准备: 1.需要在Hadoop[hadoop-2.7.3] ...
- Mysql 中 char 、varchar 、text的区别
首先它们的存储方式和数据的检索方式都不一样.数据的检索效率是:char > varchar > text 空间占用方面,就要具体情况具体分析了. char:存储定长数据很方便,CHAR字段 ...
- 安装在Ubuntu上的Python虚拟环境
安装指南是在 Ubuntu 下面操作的.不同的 Linux 版本,安装指令不同.所以,该指南的某些指令对于像 CentOS 等非 Ubuntu 系统不适用. 为什么需要使用虚拟环境? 虚拟环境是一个将 ...
- angular中使用AMEXIO
1.用NPM添加依赖到项目中,amexio需要先添加以下四个依赖到项目 npm install jquery@3.2.1 --save npm install bootstrap@4.0.0-alp ...
- CentOS 7 中 Docker 的安装
CentOS 7 中 Docker 的安装 Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: [root@loc ...
- 轻量级运维工具-pssh,pscp,prsync,pslurp,pnuke
批量执行,并行传输,远程killall #yum安装 yum install pssh -y #yun安装后pscp改名为pscp.pssh #源码编译 wget https://pypi.pytho ...
- javaScript如何跳出多重循环break、continue
先来说说break和continue之间的区别 for(var i=0;i<10;i++){ if(i>5){ break; }}console.log(i); ---6 •当i ...