博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ3778 Talented Chef(贪心)
阅读量:6978 次
发布时间:2019-06-27

本文共 1019 字,大约阅读时间需要 3 分钟。

题意:

要做n道菜,每道菜有a[i]个步骤,厨师每次可以操作m个步骤,求最小需要几次把菜做完。

要点:

就是小学搞过的摊饼问题,一个饼要几分钟这样。可以这样思考:如果m>=n,那肯定就是所有a[i]中的最大值max作为结果。如果m<n,那我们先求ans=sum/m,也就是平均值,结果只会比这个值大而不会比这个值更小了,如果sum%m==0,说明最后一次也能同时操作m个菜,ans=sum/m,否则说明最后一次还剩下一些为1的(中间无论怎么操作最后肯定使其他的可以剩下1,仔细想想就可以看出来),ans=sum/m+1。得到ans后与max比较,如果ans<max,那不可能通过ans次操作使max为0,结果为max,反之为ans。

贪心思想:贪心的将每一分钟的操作都不浪费的去做菜就能达到最贪心的点,也就是最小消耗。那么这个时候的最小消耗就是:sum/m(如果是整除)sum/m+1(如果是不整除)。

参考博客:

#include
#include
#include
#include
using namespace std;int main(){ int t,n,m; int a[40005]; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &m); int sum = 0; int maxx = -1; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); sum += a[i]; maxx = max(maxx, a[i]); } int ans; //贪心思想,充分利用每次操作能达到最小的操作数 if (sum%m == 0) ans = sum / m; else ans = sum / m + 1; //不能整除说明最后还剩一些需要再一步操作 ans = max(maxx, ans); //如果贪心不能达到最大值,那结果就是最大值,反之说明贪心成立 printf("%d\n", ans); } return 0;}

转载于:https://www.cnblogs.com/seasonal/p/10343757.html

你可能感兴趣的文章
网络安全技术分析:DDoS的攻与防
查看>>
LNMP安装配置
查看>>
什么是机器人底盘 答案在这里!
查看>>
SNMP 协议 OID的使用
查看>>
【CSS3教程】CSS3基础&常用技巧&实例集合
查看>>
面试题:2018最全Redis面试题整理
查看>>
引用头文件#include <queue>出错
查看>>
koa2 简单了解
查看>>
阿里P7架构师告诉你Java架构师必须知道的 6 大设计原则
查看>>
详解微信域名防封的方法以及检测等工具的技术原理
查看>>
smobiler介绍(二)
查看>>
Windows 8 快捷键大全
查看>>
安装hadoop下的sqoop1.99.3及配置问题全解决
查看>>
expect
查看>>
Could not create the view: An unexpected exception was thrown. Myeclipse空间报错
查看>>
RHEL6入门系列之九,常用命令2
查看>>
LINUX新手入门-1.装系统
查看>>
Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)
查看>>
puppet 初识
查看>>
rsync
查看>>