首页 > 代码库 > 快餐问题(dp好题)

快餐问题(dp好题)

Peter最近在R市开了一家快餐店,为了招揽顾客,该快餐店准备推出一种套餐,该套餐由A个 汉堡,B个薯条和C个饮料组成。价格便宜。为了提高产量,Peter从著名的麦当劳公司引进了N条 生产线。所有的生产线都可以生产汉堡,薯条和饮料,由于每条生产线每天所能提供的生产时间是有 限的、不同的,而汉堡,薯条和饮料的单位生产时间又不同。这使得Peter很为难,不知道如何安排 生产才能使一天中生产的套餐产量最大。请你编一程序,计算一天中套餐的最大生产量。为简单起见, 假设汉堡、薯条和饮料的日产量不超过100个。N<=10

 

动态规划不难,F[i][j][k]表示前i条生产线,生产了j个汉堡,k个薯条,最多还能生产多少饮料。裸的动态规划复杂度是O(N*100^4),极限数据还是要挂,能过7个点。需要加贪心优化。。首先“汉堡、薯条和饮料的日产量不超过100个”,那么答案必定不会超过max= min{100/A,100/B,100/C}。因此如果dp过程中得到了一个大于等于max的解,那么直接输出max,退出。还有一开始如果每条生产线的时间全用来生产全套的,这样加起来已经比max大了,那么不需要dp直接输出max。

还有一个不怎么靠谱的贪心,非常靠运气,就是 如果一条生产线的时间够生产全套的,那么让它生产一些全套的,但不要全部生产全套(试验证明全部WA),比如它能生产5套全套的,那就让它生产2套,剩下的时间拿来dp。。把握的好的话可以AC,并且时间很快。