首页 > 代码库 > 快餐问题(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,并且时间很快。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。