在算法竞赛中,很多时候,题目的数据范围是非常有力的解题线索(其实不光光是数据范围,只要是一些有特点的限制或宽松都可以为你提供线索)。
举几个例子:
数学题,求期望,难点在计数,经验丰富基本能够想到计数dp。如果经验不够丰富该怎么办呢?
其实本题的数据范围给了我们非常多的线索。
首先1<=N<=12,这个数据范围很多时候都代表了位压缩。毕竟阶乘承受不了,立方又太水。指数级别的复杂度就差不多,指数级别的算法基本就是位压缩了。
其次1<=M<=500,这个数据范围不是很大,无论是对空间还是时间都很友好。为dp状态定义所需要的空间以及对dp状态转移需要的时间都可以承受。
类似的还有很多,比如2017-GDCPC-B 1<=N<=16 ,状压DP。
FZU 2105 Digits Count
RMQ,区间位运算,询问区间和,难点在维护。特点是维护的值的范围是[0,16)。从这个特点下手,16是2^4,a[i]<16,可以考虑把一个数拆成4个二进制位,分别维护。
ZOJ 3779 Chessboard and Flowers
组合数学,需要用到一些简单的排列组合知识,但有些基本量不好计算,在数据范围很小的情况下,采用了暴力枚举的方法来计算。
给你一个简单图,由n个点,m条边。求它的一个二分子图,使得这个二分子图的边至少是m/2。
特点是,只需输出二分子图的两个点集,边至少是m/2。
值得思考的地方是:
1、为什么不要求求出具体的图,而只要求求出两个点集呢?
2、为什么边至少是m/2,而不是m/3或者其他值,也不是要求边数最多呢?
这两个地方就是突破口。