[BZOJ2667][cqoi2012][kcoj]模拟工厂

Posted 小飞淙的云端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BZOJ2667][cqoi2012][kcoj]模拟工厂相关的知识,希望对你有一定的参考价值。

题目描述 Description
有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1。在每个时刻,你可以提高生产力或者生产商品。如果选择提高生产力,在下一个时刻时工厂的生产力加1;如果选择生产商品,则下一个时刻你所拥有的商品数量增加p,其中p是本时刻工厂的生产力。
n个订单,可以选择接受或者不接受。第i个订单(ti, gi, mi)要求在时刻ti给买家提供gi个商品,事成之后商品数量减少gi,而收入增加mi元。如果接受订单i,则必须恰好在时刻ti交易,不能早也不能晚。同一时刻可以接受多个订单,但每个订单只能被接受一次。要求最后的总收入最大。
例如,如果一共有两个订单(5,1,8)和(7,15,3),用如下策略是最优的:时刻0, 1, 2提高生产力(时刻3的生产力为4),然后在时刻3,4生产商品,则在时刻5时将拥有8个商品。此时接受第1个订单(还会剩下7个商品),并且在时刻5,6继续生产商品,则在时刻7时拥有7+4+4=15个商品,正好满足订单2。
输入描述 Input Description
输入第一行包含一个整数n,即订单数目。以下n行每行三个整数ti, gi, mi
输出描述 Output Description
 输出仅一行,为最大总收入。输出保证在32位带符号整数范围内。
样例输入 Sample Input
 2
5 1 8
7 15 3
样例输出 Sample Output
 11
数据范围及提示 Data Size & Hint
 

编号

1-3

4-6

7-10

n

<=5

<=10

<=15

ti

100

100

<=100,000

gi

10,000

10,000

<=109

mi

10,000

10,000

<=109

 这道题让我特别失落。有时候这就是命运,你必须接受。

首先n<=15,可以2^n枚举到底选哪个物品,然后再进行判定这堆物品到底可不可以选。

对于一段时间,肯定是先提高生产力,然后再开始干活,这样的策略一定是没有错的。

于是我先想:我们能不能先玩命加生产力,一边加一边判断,再加生产力会不会没有时间,这样既能保证能取到这个物品,而且此后我们的生产力还很大。但是继续想了想发现,如果前面浪大了一直不造物品,一直蓄力,直到最后才敢时间造完当前物品,结果发现下一个物品时间已经不够了,这种情况是很可能存在的,所以以上策略失败。

针对于我刚刚出现的问题,我想,一定要在当前这段时间内保证生产的物品尽可能多(不再追求于生产力),于是我就列了一个式子(v0+x)(t-x)其中v0表示这段时间开始的时候的生产力,x表示停止蓄力的时间,t是这段时间的长度,于是我们只需令这个式子最大即可,这是一个简单二次函数求极值问题,我们程序算完之后这段时间内的最大值,也就是说生产了一坨物品,当前这个物品耗掉一些,之后继续做,感觉这种思路每一段时间内都能得到最大的物品数,看样子是很靠谱的。想到这个做法之后,我还有一个质疑,最大的物品数,生产力并一定是最大的,可能最终的答案也会有所不同。但是我无法证明,其实是因为式子过于繁琐,比较难证。

然后我就写了一波,然后交了一发。很显然是WA的。心情不爽的我看了正解:

正解是在我最开始的思路上继续的:既然这么做我们只是考虑眼前的利益,并且会影响到我们以后的收益,那么我们为什么不在这时就把后边所有物体全考虑一遍呢?还是那个式子(v0+x)(ti-x)>=gi是一个不等式,解出来一个区间,对于每一个i都有一个区间,也就是说x在这些区间的交集中都可以满足使得后面的全取上,贪心的原则:生产力尽可能大,于是我们就去这些区间交集的最右段作为我们的生产力,继续做即可。

至于为什么是对的,我也不知道。

针对于两种贪心做法,好像每一种都有其中的道理,但是正确的做法只有一个。我抱着自己的贪心策略,懒得(不会)证明,就默认是对的了,如果你运气好,直接想到了方法2,算你命好,如果像我一样在走方案1时遇到困难转而跳转为方案2,就卒了。

针对于这类事情,我也不知道该怎么办。

看到贪心题的题解之后,觉得这种贪心策略挺显然的,考试的时候我肯定能想到,是么?考试的时候你可能猜到了另外一种策略,抱有自己的策略一定是正确的观点做题,只能靠命运了。

管大视野要了数据,等数据来了我手测一下,10个点中,我的策略究竟能跑过几个点,事后再把这道题A了的代码交上来。

明天还有物理化学考试,再见了。

以上是关于[BZOJ2667][cqoi2012][kcoj]模拟工厂的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ2666[cqoi2012]组装 贪心

bzoj2669 cqoi2012—局部极小值

bzoj2668 [cqoi2012]交换棋子

[BZOJ2668][CQOI2012]交换棋子

[bzoj2665] [cqoi2012]编号

●BZOJ 2669 [cqoi2012]局部极小值