您的位置:首页 > 其它

NOIP 2015提高组 题解+分析

2016-02-15 19:37 197 查看
这一次的提高组出的题挺丧心病狂的,似乎比普及组还要容易看出算法,随便就400+。我在洛谷上测得好像是500多。真不知CCF在想什么?算了不说那么多了,直接上分析:
(以下的题目中D1A表示第一天第一题,D2B表示第二天第三题,以此类推)题目算法简单分析:【D1A】 简单模拟【D1B】 直接扫一遍找最小环,或者看网上好像有类似拓扑排序剩下回路的方法,总之方法非常多【D1C】 将牌二进制状压,或着记忆化搜索
【D2A】 显然是二分答案【D2B】 用各种方法动规,目测想出一个类哈希优化的O(n^2)算法【D2C】 一开始没看到m个运输计划的要求,以为是次小生成树,类似《秦始皇修路》的方法,后来才发现尚倒比较难……好像树链剖分之类的方法可以来坑分,总之,要小心常数(CCF竟然卡常数)
题目正式题解:【D1A】 模拟不说了,NOI题库的题目,改了一下数据规模。【D1B】直接DFS,标记找到过的每一个节点,显然就是O(n)的算法。或者说用拓扑排序不断找环,不过好像本质上还是广搜。【D1C】 显然这一道题目应该就是搜索了。只需要将出没出牌变成二进制,出了就是1,没出就是0。接着对于全部的0开始记忆化搜索,接着穷举所有的出牌方法,然后记忆化,显然不会爆空间。
【D2A】 最小值最大,显然就是二分,在NOI题库上都有原题。【D2B】 其实和USACO 2014 Feb BRONZE相似,只不过多了一个K个子串的要求。但是,要注意倒序求解!也就是说,一个正序枚举A中的每个字符,再反序枚举B中的字符,如果Ai=Bj,则DPj+=DPj-1,但是j=0时++DPj即可。但是这个时候,我们可以发现一个优化:哈希表。注意到字符总数不多,于是可以用开放寻址法(拉链法),算是一个常数优化吧。 接着,估计直接DP就行了,加一维子串的个数,再注意模一下就好了。【D2C】 似乎可以树链剖分,总之是有什么优化都丢上来……没想到最优化解法,但是写一个暴力都不少分了。正解应该是利用LCA的时间戳+RMQ和线段树的线段覆盖操作即可,不过听说还有直接用线段树的做法。主要注意常数的优化。
总结:挺简单的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: