一、寻找特殊点
有一些题目根据题目模拟是和正解一点关系都没有的,需要找到一种不通用的方法。
例:
1、noi2017 整数
首先,只有加和减,于是直接想到对位减和对位加于是就有进位和退位操作,这时就变成了区间操作问题
然后数据范围 30*10^5 一般线段树都是1e5,为什么这个题是30? 然后发现30≈2^31,然后就可以压位线段树了
2、noip2005 过河
首先,任何基于距离的算法都一定会T,因为距离很长
然后石子数<=100,所以正解一定和石子有关,然后一定是有大段的距离是可以无视的,无视的距离一定是按某个规律排下去的
同时l和r也比较小,所以无视的距离和l、r有关,列一下能到达的点就可以发现lcm覆盖所有点
3、sdoi2017序列计数
题目要求比较有特色:至少有一个质数。如果直接枚举质数和质数个数是指数级的
所以,这种至少有一个符合要求的就相当于 在 0~n 中 求1~n的值,由于0~n是全排列 0是单独一种,所以简单容斥
4、scoi2005 王室联邦
题目要求范围是b~3b,显然是在放宽或限制什么,然后尝试每个卡下限,就发现最差情况也是<3b的,所以就好做了
5、 t joi2013 循环格
这个题需要挖掘题目本身的隐藏条件:每个格子只会被流入一次,只会被流出一次,所以在分析题目的时候有一些操作有可能具有满足某种条件
6、haoi2007 覆盖问题
这个题要求用3个正方形,为什么是3个,于是根据3个去考虑方案特点,会发现一定有一个正方形卡住两边
根据数据范围判断算法
例:所有状压dp+矩乘dp
特殊点可能出现的3种情况:
1、条件 2、问题 3、题目的操作
有时较小的数据也可能成为突破口
二、离散
对于一类计数问题,必须尽量弃掉所有不影响的因素,甚至上组合数统计
例:
1、地精部落
枚举每个数字是什么是没有前途的,所以要不计前面数字是什么的情况下求出答案
然后 由第一块说的 题目的操作 思考,发现只有上一个数列的最后一个数和上升下降有关系
所以可以只表示最后一位,前面的数都可以离散,因为无论插入哪个数,都一定可以和前面的一个数替换
2、中国象棋
由于每一列、每一行在放置情况相同时都是等价的,而放置情况只与个数有关,所以就按照个数 离散进去
3、problem c
离散的是人的位置,其实就是把数据集中了一下,然后一起处理
三、方程
有一些限制比较繁琐,有比较明显的运算关系的题可以列+推式子
例:
1、方格取数
两种颜色的个数统计,抽成数字0,1,然后就变成了异或和0、1,得到这四个数对各自的影响 ,然后需要知道每个数受到的的影响
注意它给的是2*2,就相当于4个一个单位,然后往外扩,然后发现任何a*b的关系都是可以限制的,所以就维护相等与不同的关系即可
2、翻硬币
由于各个因素互相影响,所以列出异或方程,表示关系,然后找解即可
3、圆上的整点
先列出圆的方程,然后因式分解。。然后利用平方来回化。就是说等价的式子,形式不一样,求解的难度也不一样
四、单调性
利用某种属性的单调性,可以得出贪心做法
例:二分检验、单调队列、
套路:
1、限制因素有很多,只取其中一个
2、适当枚举,转化问题
常见套路也可能会导致思维定式
跳出思维定势,需要:
抛弃想法中的某一步,换成结论代替