您的位置:首页 > 其它

贪心(ZOJ 3778,Talented Chef)

2017-04-24 15:59 204 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3778

给你n道菜,第i道菜需要a[i]步才能完成,厨师每次最多可以取m道不同的菜,各完成1步,问最少要多少次才能完成。

答案:

设a=max(a[i]),1<=i<=n。即完成某道菜最多需要的步数。

b=((∑a[i])-1)/m+1。步数和除以m,向上取整。

答案就是max(a,b)。

证明:

如果除了最后一次,每次都能取m道不同的菜,那答案就是b。

否则,肯定存在某一次,剩下的菜少于m道,而且不能一次完成。

因为菜与菜之间唯一的区别就是剩下的步数,所以我们每次取剩下的步数最多的m道菜来制作一定是最优解。

如果哪怕是这样做,依然遇上了没菜做的情况,那么说明我们之前每次肯定都取了最多步数的那道菜。更重要的是我们以后也依然会是这样,所以答案就是a。

因为答案必是a,b之一而且两者又刚好都是一个下限,所以取最大值就是最终答案。

思路:

ACM这种东西以AC为准,就算不能给出严格证明,也可以猜一猜。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: