ZOJ3778 Talented Chef(贪心)
来源:互联网 发布:苍南哪有淘宝培训 编辑:程序博客网 时间:2024/05/17 02:35
题意:
要做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<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>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;elseans = sum / m + 1;//不能整除说明最后还剩一些需要再一步操作ans = max(maxx, ans);//如果贪心不能达到最大值,那结果就是最大值,反之说明贪心成立printf("%d\n", ans);}return 0;}
0 0
- ZOJ3778 Talented Chef(贪心)
- ZOJ3778:Talented Chef
- ZOJ3778 Talented Chef
- ZOJ3778-Talented Chef
- ZOJ 3778 Talented Chef (贪心)
- 贪心(ZOJ 3778,Talented Chef)
- zoj 3778 Talented Chef 贪心
- ZOJ 3778 Talented Chef【贪心】
- ZOJ 3778 Talented Chef (贪心+二分)
- L-Talented Chef(数学题)
- Talented Chef
- Talented Chef
- Talented Chef
- Talented Chef
- talented chef
- ZOJ 3778 Talented Chef(数学啊 )
- ZOJ 3778 Talented Chef(计算器模拟)
- zoj 3778 Talented Chef (思维)
- C++作业四
- android中drawable资源文件的使用
- yuv420格式
- 数据结构_分别使用for循环和递归打印1-N的所有整数,比较运行时间
- MySQL索引背后的数据结构及算法原理
- ZOJ3778 Talented Chef(贪心)
- POJ 1182 食物链
- 三种观察者模式的C#实现
- javascript的基础学习笔记
- Android Jni编写
- js的get set, 构造函数,匿名函数,prototype(原型)
- 堆的操作
- JavaWeb开发-tomcat目录详解
- Activity setContentView(int layoutResID) 发生了什么