原题here

这种题肯定是不会的,只有靠膜syk神仙才会的

题意一条一维的路上有草地(Grass)、山(Lava)、水(Water)三种地形

Bob(一只鸭子)可以游,走,飞

游一米要3s,走要5s,飞只要1s。

走和游一米积攒一点能量,飞一米消耗一点。

求最快时间。

这这这……F题竟成了一个大贪心!

贪心有很多种方法,这里我讲一种简洁的回溯式贪心

想象你在模拟,前面时一片Grass或Water,最贪的方法当然是走/游一半飞一半

然而你走到Lava时,power不够十分尴尬,悔不当初。

于是你决定时光回溯,将原先贪快而飞过的那一段改成走/游,用来积攒power,不就解决了吗?

问题是,怎么时光回溯呢?

这还不简单,把原先飞的路程记录下来,到power不够的时候把这个值调整一下,就达到了效果——简单方便。

但是因为地形比较复杂,所以决策很多(个鬼),我们排个优先级:

游>走>洄游>往回走(洄游/往回走即碰到一个巨大的Lava,前面全部走/游还不够power,无可奈和只能走来走去积攒power)

这是什么意思呢?

就是说你要走的时候,先看看前面(优先级比走大)的决策可不可行。

举个栗子:

就是先是一片Water你半游半飞,然后是一片Grass,这是你先考虑把前面Water的飞改成游,再在Grass上多飞一会。

同理遇到Lava时,尽量考虑优先级大的方案。

贴个(膜syk大佬的)代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#define SYK 150000
#define orz_syk long long
using namespace std;
orz_syk syk1,syk2,syk3;//syk1 :前面本可以游却改成飞的路程//syk2 :同理 走改飞//syk3 :时间
char orz[SYK];
orz_syk lib[SYK];
orz_syk n;
bool  op=false;
int main()
{scanf("%lld",&n);
for(int i=1;i<=n;i++){scanf("%lld",&lib[i]);}
for(int i=1;i<=n;i++)cin>>orz[i];
for(int i=1;i<=n;i++){if(orz[i]=='W'){syk3+=lib[i]*2;syk1+=lib[i];op=true;}//遇Water游一半飞一半if(orz[i]=='G'){if(syk1>=lib[i]){syk3+=2*lib[i];       syk1-=lib[i];syk2+=2*lib[i];continue;}syk3+=2*syk1;syk2+=2*syk1;lib[i]-=syk1;syk1=0;syk3+=3*lib[i];syk2+=lib[i];}//遇水前面有syk1先消耗syk1,再走if(orz[i]=='L'){if(syk1>=lib[i]){syk3+=2*lib[i];syk1-=lib[i];continue;}syk3+=2*syk1;lib[i]-=syk1;syk1=0;if(syk2>=lib[i]){syk3+=lib[i];syk3+=lib[i]*2;syk2-=lib[i];continue;}syk3+=syk2;syk3+=2*syk2;lib[i]-=syk2;syk2=0;if(op)syk3+=4*lib[i];else syk3+=6*lib[i];}}//遇Lava先消耗syk1,再是syk2,然后是洄游,不行再往回走
cout<<syk3;
}

  

syk:这题可naive了!

转载于:https://www.cnblogs.com/stepsys/p/10235501.html

[CF1091F](New Year and the Mallard Expedition)相关推荐

  1. CF1091F New Year and the Mallard Expedition

    题意 在一条路上有草地(G)(G)(G)水(W)(W)(W)和石头(L)(L)(L). 草地:可以走也可以飞. 水:可以游也可以飞. 石头:只能飞过去. 游:每米需要3s3s3s,但能得到111耐力. ...

  2. Codeforces 1091F New Year and the Mallard Expedition

    题面 题意 有一段路要走,路一共有三种类型:草地,水,岩石,在草上可以步行,在水中可以游泳,可以在任何地形上飞,已知每走过1m要花5s但能得到1点能量,每游过1m要花3s但能得到1点能量,每飞过1m要 ...

  3. SP348 EXPEDI - Expedition(有趣的贪心,优先队列)

    SP348 EXPEDI - Expedition 1 4 4 4 5 2 11 5 15 10 25 10 2 以下来自<挑战程序设计竞赛> 以及我的辣鸡程序(竟然没超时!) #incl ...

  4. mentor公司的PCB设计软件:PADs, Expedition,BoardStation

    mentor公司算是生产PCB设计软件在 种类上最多的一家公司了吧,而且名目多,叫法也很复杂.以前用过protel.cadence.pads,现在想研究一下其他的pcb设计的东东,发现 mentor产 ...

  5. Mentor Expedition如何极坐标旋转添加器件?

    Mentor Expedition(EE)如何极坐标旋转添加器件? 我们在使用EDA工具画PCB时,常常会出现一些器件使用极坐标方式摆放器件,对于我们常见的AD.PADS.allergeo相信大家都能 ...

  6. 2019_GDUT_新生专题V算法优化 F. Expedition POJ 2431

    题目: Language: Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31110 Accepted: ...

  7. 【POJ No. 2431】 丛林探险 Expedition

    [POJ No. 2431] 丛林探险 Expedition 北大OJ 题目地址 [题意] 一群人开着一辆卡车冒险进入丛林深处,卡车油箱坏了,每走1米就会漏1升油,他们需要到最近的城镇(距离不超过10 ...

  8. 【贪心算法】poj 2431: Expedition(最优加油方法)

    题目描述(传送门) Description A group of cows grabbed a truck and ventured on an expedition deep into the ju ...

  9. 【小白爬POJ2431】3.6 探险车加油问 Expedition

    [小白爬POJ2431]3.6 探险车加油问题 Expedition 题目 Description Input Output Sample Input Sample Output Hint 思路 PO ...

最新文章

  1. Python全局解释器锁GIL与多线程
  2. 播放2.0:Akka,Rest,Json和依赖项
  3. 【算法分析与设计】辗转相除法
  4. 最小二乘原理求解线性回归方程
  5. 某一天,忽然发现自己坚持不下去了。(无关计算机,只是一些自己的困惑和感想)
  6. iOS项目转移到自动引用计数
  7. object、param标签及页面显示PDF文件的方法
  8. matlab中dfft,2-DFFT 该实验的目的是开发一个 2-D FFT程序包 联合开发网 - pudn.com
  9. 家庭记账的最简单方法
  10. 我的c盘为多余的java.exejavaw.exe_java.exe,javac.exe,javaw.exe 是什么进程?
  11. 服务器被入侵了怎么办
  12. Android打包动态配置签名
  13. 服务器背板作用,硬盘和服务器背板
  14. Stimulsoft新版本2022.4 版本正式发布|附免费下载试用
  15. js简单交互动画,运动吧
  16. 计算机键盘可为哪几个区,电脑键盘分为哪几种?
  17. 使用 Tableau 连接到 Hortonworks Hadoop Hive
  18. MySQL查询优化实例
  19. AI大模型加持,生成式搜索来了!
  20. kindeditor自定义添加网络视频插件,修改批量图片上传方式flash为h5

热门文章

  1. mount挂载基础点
  2. 信息学奥赛一本通1258:【例9.2】数字金字塔题解
  3. 超市收银系统c语言程序用c 的,C语言 超市收银系统
  4. java分布式服务框架Dubbo的介绍与使用
  5. Java编写的教室管理系统 带详细设计报告 功能非常齐全 完整源码
  6. vscode安装ARM插件搜不到
  7. 设计模式—— 四:接口隔离原则
  8. Excel如何拆分sheet(宏功能应用)
  9. nodejs之json数据
  10. 带你认识网络世界,什么是网络协议、分层有什么好处