题目大意
有 个人排队准备录视频,轮到第 个人的时候,如果他被商家钦定,或者排他前面的至少有 个人录视频,他就会录视频。问商家至少钦定多少人,使得最终录视频的人数 。
,由于输入过大,仅输入 ,接下来给出 段生成器,每段生成 个 (保证 ),每个生成器形如 , 为质数。
4s, 64MB
题解
思考许久,转头发现,这个空间,甚至连 的数组都存不下。。。
感觉题解给得很妙啊。
考虑最后一个人,如果 ,他是一定会录视频的,因此转化为子任务 ;
否则,如果 且 ,这个人必须被钦定,不然不合法,因此也转化为子任务 ;
否则, 且 ,此时要么前 个人已经选出了 个,那么第 人直接扔了就好;要么前 个人只选了 个,想要钦定第 个人,但是钦定前面的人只会使答案更优,所以不会有该情况。也就是说, 且 时,直接忽略最后一个人,转化为子任务 。
于是这样倒着做一遍就做好了。
由于空间不允许存下整个数组,可以先求出 ,因为 都是质数,因此可以倒推出所有 。 不同的生成器之间不能倒推,但是可以开一个 的数组记录每个生成器最后生成的 是多少。
妙啊
代码
1 |
|
