NOI历年总结
NOI2007
- 社交网络 图论
,最短路,floyed。
- 货币兑换
DP,斜率优化,分治或动态凸包
经典的动态凸包或分治斜率优化DP
的问题。 - 项链工厂
线段树
旋转和翻转实际上没有对序列做出改变,记录项链的起点和方向即可直接用线段树。 - 生成树计数
DP,基于连通性状态压缩,矩阵乘法
新添加一个节点的时候,方案只和最后 k k个点的连通性相关。状态压缩连通性(最小表示法),暴力处理转移,矩阵乘法优化。
NOI2008
- 志愿者招募
线性规划,网络流
比较奇葩的建图(差分或线性规划花间式子),也可以用单纯型。 - 糖果雨
树状数组
全部转换为时刻为 0 0的状态,以起点、长度为横纵坐标建二维树状数组,用补集思想查询。 - 道路设计
树形DP
令 f[i][j][k] f[i][j][k]表示第 i i个点得子树,最大的不便利度为 j j( logn logn),和儿子的边里面有 k k( ≤2 ≤2)个火车道,方案数。 - 假面舞会
并查集
如果原来不是一个集合直接合并并维护信息,是的话答案必为差值的约数。 - 奥运物流
环套树DP
枚举环的长度,枚举本身的高度,直接DP
, O(n5) O(n5)。
NOI2009
- 变换序列
匈牙利算法
直接二分图匹配,倒着做,优先找字典序小得。 - 诗人小G
DP,决策单调性
如题…… - 二叉查找树
区间DP
以数据值
排序区间DP
,离散化权值
, f[i][j][w] f[i][j][w]表示 i i到 j j构成的子树所有点权值大于 w w的最小代价 - 植物大战僵尸
拓扑排序,最大权闭合子图,网络流
经典建图,负权植物相当于“成本”,正权植物相当于“收益”,最大权闭合子图建图最小割即可。当然首先要拓扑排序,避免环的情况。正权和正权之间、正权和负权之间也是可以连边。 - 管道取珠
DP
所谓平方可以理解成两个装置最后取得同样的序列的方案数。然后三维DP
即可。
NOI2010
- 能量采集
数论,反演,mu或phi函数
经典的反演问题,两种推法——一种用莫比乌斯反演,一种直接利用欧拉函数的性质。 - 超级钢琴
主席树或RMQ,堆
问题相当于取前 k k大,对于每一个点作结尾,主席树做法:维护这个点取到第几大,RMQ做法:每次用完后拆成两个区间扔回堆里。很经典。 - 海拔
最小割
想想就会发现只可能是 0 0和 1 1,然后 0 0和 1 1交界处会有损失,不就是最小割么…… - 航空管制
拓扑排序
正着做很蛋疼,我们倒过来做。因为正着是放晚了不行,而倒过来是放早了不行,所以不用担心往后脱。第二问就尽量先撑着不放目标点,实在不行了再放。
NOI2011
- 兔农
矩阵乘法,斐波那契数列
用了一些斐波那契数列循环节的结论。找模 k k意义下的循环节,然后矩阵乘法。 - 智能车比赛
DP,几何
拐点只可能出现在两个矩形之间“通道”的拐点上,DP转移的时候维护一个可视弧度范围即可。 - 阿狸的打字机
AC自动机Fail树,DFS序,树状数组
先建起Fail树
处理出DFS序
,然后按顺序枚举每个字符串X,处理“Y在X中出现了几次”的询问。在DFS序
中标记X中的点,统计Y子树里面有几个标记的点。 - 道路修建
DFS,手写栈
直接DFS
一遍,卡递归…… - NOI嘉年华
DP,单调性
首先处理前缀和后缀。 f[i][j] f[i][j]表示到 i i这个位置,其中一个场地有 j j个嘉年华,另一个最多有多少。 O(n3) O(n3)。第二问令 g[i][j] g[i][j]表示 i i到 j j全选的最大答案。需要枚举左右两边 f[i][j] f[i][j]里面的那个 j j,然后发现随着左边 j j的增大,右边 j j的最优解单调不增。 - 兔兔与蛋蛋
黑白染色,二分图
路径一定不重走某一点。必胜:该点在所有最大匹配中。不要每次都再做一遍匈牙利,直接增广即可。
NOI2012
- 随机数生成器
矩阵乘法或BSGS
RT…… - 骑行川藏
拉格朗日乘数法,牛顿迭代
RT…… - 魔幻棋盘
GCD相关知识,二维线段树(点修改,区间查询)
利用 gcd(a,b)=gcd(b,a−b) gcd(a,b)=gcd(b,a−b),将维护的数字从原数字变成了差。二维类似。这样区间修改只需要修改几个点。 - 迷失游乐园
环套树期望DP
对每个点,处理向下的期望和向上的期望,环上暴力。 - 美食街
费用流,动态开节点
对于每个厨师每个做菜的时间开一个节点,对每个菜开一个节点。因为点太多,所以对厨师做菜的时间的节点动态开。
NOI2013
- 矩阵游戏
快速幂,等比数列或推式子
可以直接展开,发现可以变成等比数列求和。或者是像数学课学的求数列一样设个什么未知数…… - 书法家
DP
按照三个字母的形态划分为多个阶段,每个阶段不同的转移。 - 快餐店
树的直径,环套树,线段树
两种思路:第一种,显然环上有一条边一定不会走,枚举这条边,割掉,然后求直径,用线段树。第二种,枚举中心点在环的哪一段里面,然后转着维护答案。 - 向量内积
矩阵乘法,点积,tricky
利用神奇的矩阵
一题里面的做法,判断向量矩阵和它的转置矩阵乘起来是否和无解的答案矩阵一样。如果是模 3 3就先平方(向量变成 d2 d2维)再做。 - 树的计数
DFS和BFS序性质,线段树,期望
分为期望 +1 +1, +0.5 +0.5,清零三种情况。按照BFS
(深度不减)顺序遍历。
NOI2014
- 起床困难综合症
位运算性质
因为位运算每一位互不影响,我们当然要尽量让高位上答案为 1 1,倒着推就行。 - 魔法森林
LCT,排序
按照 A A权值排序,一个一个加,动态维护关于 B B的MST
。 - 动物园
KMP
维护KMP
,同时维护答案,用类似KMP
的方法。 - 随机数生成器
贪心
显然每次能取小的就取小的。从小到大枚举,然后我们标记那些不能再取的点。因为每个点只会被标记一次,所以复杂度是对的。 - 购票
点分治,CDQ分治,斜率优化
推式子发现是斜率优化,先点分治,然后用类似CDQ分治的方法做,排序询问,边更新凸包,边更新答案。
NOI2015
总结
-
几何 1
-
DP 13 包括:
- 斜率优化 2(都是分治)
- 矩乘 1
- 连通性状态压缩 2(一个是插头,另一个只是划分一下状态)
- 树形 2
- 环套树 2
- 单调性 2
- 区间 1
- 期望 1
-
期望 2
-
数据结构 9 包括
- 树状数组、线段树 5
- LCT 1
- 堆 1
- 并查集 2
-
环套树相关 3
-
网络流 5 包括:
- 线性规划(转成费用流) 1
- 最小割 1
- 最大权闭合子图 1
- 费用流 1
- 有上下界的网络流
-
图论相关 4 包括:
- 拓扑排序 2
- 二分图 2
-
数学相关 4 包括:
- 数论 1(反演)
- 数列相关2
- 拉格朗日乘数 牛顿迭代 1
-
矩乘 3
-
字符串 2 包括:
- AC自动机(Fail树) 1
- KMP 1
-
点分治 1
-
位运算相关 1
-
贪心 2