题目链接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3385


题目大意:

妖梦要准备一个party,所以需要许多食物,初始化妖梦的烹饪技能为L,每天妖梦有两种选择,一是选择当天做L个食物,二是提升自己的烹饪技能为L+1。

但是幽幽子非常能吃,每天幽幽子都要吃Ai的食物,当没食物吃后幽幽子会非常生气,甚至想把妖梦批判一番。所以现在妖梦要保证做出的食物每天够幽幽子吃的情况下尽量的多。


解题过程:

好久好久之前比赛的题,一直没补,当初知道是贪心和栈,感觉这样的思维题加简单的数据结构的题非常难……也可能是直接接触的题太少吧。


题目分析:

首先用栈去贪心的模拟,在能保证够幽幽子吃的情况下,最多能够将技能提高到几级。

假设每天都提高等级并且将天数入栈,当当前剩下的食物不够幽幽子吃的话,将上一次提升等级的地方换成做食物。如果还是不够幽幽子吃的话,那么就是无解的。

因为提高等级是一个持久性的加成,当然是越早提升越好,所以每次将提高等级换做做食物的地方都是最晚的地方。

这样求解出最高可以升到几级后,再去求下最大能达到多少食物。

同样效仿上面的操作,每次取出最近的提升等级的地方换成做食物,去维护一个最大值。

不过有可能有这样的一个情况,在租个替换掉提升等级时,可能某个地方替换掉提升等级后食物就不够幽幽子吃了。但是这种情况,求出的结果肯定比维护的最大值要小,因为现在食物不够吃了,并且等级还低了,那么最后算出的剩余一定是更小的。


AC代码:

#include <stdio.h>
#include <stack>
using namespace std;typedef long long LL;int main() {LL N, L;while (~scanf("%lld %lld", &N, &L)) {LL sum = 0;bool flag = true;stack<LL> ss;for (int i = 1; i <= N; i++) {LL eat;//每天要吃的食物数scanf("%lld", &eat);if (!flag)continue;ss.push(i);L++;//如果当前剩余的食物不够的话,去替换掉之前提升等级while (sum < eat && !ss.empty()) {LL t = ss.top();L--;ss.pop();//将提升等级替换成做食物是很容易维护的,首先让等级减一,加上等级,然后当从提升等级那天到至今的提升等级的加成减去sum += L - (i-t);}if (sum < eat) {flag = false;continue;}sum -= eat;}if (!flag) {printf("Myon\n");continue;}LL ans = sum;//求出最大值,类似上面的过程while (!ss.empty()) {LL t = ss.top();L--;ss.pop();sum += L - (N - t);ans = max(ans, sum);}printf("%lld\n", ans);}
}

转载于:https://www.cnblogs.com/ACMFish/p/7222821.html

ZOJ3385 - Hanami Party (贪心)相关推荐

  1. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  2. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  3. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  4. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

  5. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  6. 贪心:expedition 最优加油方法

    已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加 油站到终点的距离d与各个加油站可以加油的量l,起点位置至终点的距离L与起 始时刻油箱中汽油量P;假设使用1个单位的汽油即走1个 ...

  7. 贪心:Burst Balloons 最少次数完成射击气球

    已知在一个平面上有一定数量的气球,平面可以看作一个坐标系,在平面的x轴的不同位 置安排弓箭手向y轴方向射箭,弓箭可以向y轴走无穷远;给定气球的宽度 xstart ≤ x ≤ xend,问至少需要多少弓 ...

  8. 贪心:jump 游戏(获取最少跳跃的次数以及跳跃路径)

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回最少 ...

  9. 贪心:Jump Game 跳跃游戏

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回是t ...

最新文章

  1. 关闭Windows 2000/XP/2003默认共享
  2. 清除病毒后经常遇到的系统修复问题
  3. 射线法 java_射线法(1190 - Sleepwalking )
  4. Cocos Creator学习目录
  5. 可信平台模块(TPM)概念介绍
  6. 桥接路由器总是掉线_多路由的无线桥接步骤
  7. c++运算符优先级总结
  8. python 曲面_Python之OpenGL笔记(35):曲面物体的构建
  9. libvirt- Virsh 所有命令详单
  10. 整合Activiti Modeler到业务系统(或BPM平台)
  11. Python批量检查网页是否被注入其他页面
  12. 帧同步分离逻辑层和渲染层_帧同步如何分离逻辑和渲染?
  13. 获取计算机特征码,如何查看计算机特征码
  14. 011 dilate(膨胀)、erode(腐蚀)
  15. windows系统文件简述
  16. 英语背单词有用吗_对于大学生英语背单词软件哪个好可以用_最好的背单词
  17. 微信公众号简易入门教程
  18. 2021 软件测试工具大全
  19. 新浪微博基于Docker的混合云架构与应用实践
  20. 摇一摇语音报时(序)

热门文章

  1. matlab 小波 cdd,[Matlab] 单导联心电数据的小波(包)消噪及压缩
  2. linux 无密码登录另一台服务器,ECS Linux服务器ssh免密码登录另外一台服务器的具体设置...
  3. php post请求后端拿不到值_PHP Post获取不到非表单数据的问题解决办法
  4. 我的python学习笔记全集_我的python学习笔记
  5. 转义字符的使用和功能python_Python中转义符和格式符的混合使用,python,转义字符,与,格式化...
  6. let 只能在严格模式下吗_LET的完整形式是什么?
  7. php 生成css文件怎么打开,php生成html文件的多种步骤介绍
  8. 源码 状态机_[源码阅读] 阿里SOFA服务注册中心MetaServer(1)
  9. 删除字符串的前置或者后置空格
  10. uva 1615——Highway