NOIP's 算法

来源:互联网 发布:python math 大小比较 编辑:程序博客网 时间:2024/05/24 05:00

NOINOIP算法考前总结,带*NOIP级别的比赛中涉及到的几率不大的算法

一、基础算法

一般都是前几题,会比较简单

1、模拟   注意要写准确,注意细节,简单的模拟一定要AC,复杂的模拟要先用手写清楚再开始遍  例如noip2011 mayan

2、搜索(枚举)   dfs,bfs,同样简单的尽量AC。有些搜索需要剪枝,尽量刨去不会出现的答案

3、贪心   重点在证明,如果实在没有好的方法又不会证明可以用来骗骗分 例如noip2011 bus

4*、矩阵  关键是构造出正确的矩阵,实现很简单,范围大时要用快速幂

二、动态规划

一般每年必考至少一道

DP题时,最好先在纸上写好状态转移方程和边界条件

1、背包  分为01背包,部分背包,完全背包等。例如  采药,金明的预算方案等

2、线性DP  这例如 添加号,ioi2003方块消除

3、坐标型DP  例如  noi99棋盘分割

4、区间型DP  例如  noip2005能量项链,noip2008传球游戏

5、树形DP  例如 皇宫看守,noi2012 parkpoi-6 tro,poj1947

6、*状压DP  本质就是用一个数字表示一个状态,一般有最小表示法和括号表示法。 例如noi2001炮兵阵地,noi2007生成树计数,SCOI2005互不侵犯的king

7、*斜率优化DP  这类题需要手推公式,然后找到单调性。 例如HNOI2008玩具装箱,APIO2010特别行动队

三、图论

       这类题种类非常多

1、最短路  必会的算法,spfa,dijkstradijkstra注意用堆优化,尽量用dij+heap而不是spfa 这类题到处都是

2、最小生成树  稀疏图用kruskal,稠密图用primprim也可以堆优化

3、LCA  会一种求LCA的方法就够了,比如Tarjan的离线算法,时间复杂度是O(n+Q) 例如BZOJ1776

4、强连通分量  Tarjan算法。 例如BZOJ1051

5、欧拉路的问题  例如 sgu101

6、二分图最大匹配 重点是建模。例如BZOJ1059BZOJ1433,BZOJ1562

7、*最小费用最大流  重点同样是建模。例如noi2012delicacysgu185

四、数据结构

       NOIP涉及的较少

1、   队列  都是基本算法,必须掌握

2、  并查集 例如 亲戚,noi食物链,BZOJ1015

3、  字典树 快速查找到字符串的方法,一般不单独出现,用来优化其它算法

4、  线段树 很常用的数据结构。例如 BZOJ1798      ,BZOJ1651BZOJ1230BZOJ1858

5、  *平衡树 用来维护二叉查找树的。 例如BZOJ1208BZOJ1503BZOJ1588

6、  *可并堆(斜堆、左偏树),有时启发式合并也不足以解决问题就要用它了。 例如APIO2012派遣

7、  *伸展树 用来维护序列的增加一个序列,删除一个序列,翻转一个序列等操作。 例如NOI2005序列维护,NOI2003editor

8、  *划分树 求区间第K 例如poj2104

9、  *AC自动机,多串匹配的经典算法。例如noi2011阿狸的打字机

10、            *二维线段树 类似一维线段树,只不过每个节点存的是一颗线段树,实际就是线段树套线段树。例如noi2012 chess

原创粉丝点击