[CF1091F](New Year and the Mallard Expedition)
原题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)相关推荐
- CF1091F New Year and the Mallard Expedition
题意 在一条路上有草地(G)(G)(G)水(W)(W)(W)和石头(L)(L)(L). 草地:可以走也可以飞. 水:可以游也可以飞. 石头:只能飞过去. 游:每米需要3s3s3s,但能得到111耐力. ...
- Codeforces 1091F New Year and the Mallard Expedition
题面 题意 有一段路要走,路一共有三种类型:草地,水,岩石,在草上可以步行,在水中可以游泳,可以在任何地形上飞,已知每走过1m要花5s但能得到1点能量,每游过1m要花3s但能得到1点能量,每飞过1m要 ...
- SP348 EXPEDI - Expedition(有趣的贪心,优先队列)
SP348 EXPEDI - Expedition 1 4 4 4 5 2 11 5 15 10 25 10 2 以下来自<挑战程序设计竞赛> 以及我的辣鸡程序(竟然没超时!) #incl ...
- mentor公司的PCB设计软件:PADs, Expedition,BoardStation
mentor公司算是生产PCB设计软件在 种类上最多的一家公司了吧,而且名目多,叫法也很复杂.以前用过protel.cadence.pads,现在想研究一下其他的pcb设计的东东,发现 mentor产 ...
- Mentor Expedition如何极坐标旋转添加器件?
Mentor Expedition(EE)如何极坐标旋转添加器件? 我们在使用EDA工具画PCB时,常常会出现一些器件使用极坐标方式摆放器件,对于我们常见的AD.PADS.allergeo相信大家都能 ...
- 2019_GDUT_新生专题V算法优化 F. Expedition POJ 2431
题目: Language: Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31110 Accepted: ...
- 【POJ No. 2431】 丛林探险 Expedition
[POJ No. 2431] 丛林探险 Expedition 北大OJ 题目地址 [题意] 一群人开着一辆卡车冒险进入丛林深处,卡车油箱坏了,每走1米就会漏1升油,他们需要到最近的城镇(距离不超过10 ...
- 【贪心算法】poj 2431: Expedition(最优加油方法)
题目描述(传送门) Description A group of cows grabbed a truck and ventured on an expedition deep into the ju ...
- 【小白爬POJ2431】3.6 探险车加油问 Expedition
[小白爬POJ2431]3.6 探险车加油问题 Expedition 题目 Description Input Output Sample Input Sample Output Hint 思路 PO ...
最新文章
- Python全局解释器锁GIL与多线程
- 播放2.0:Akka,Rest,Json和依赖项
- 【算法分析与设计】辗转相除法
- 最小二乘原理求解线性回归方程
- 某一天,忽然发现自己坚持不下去了。(无关计算机,只是一些自己的困惑和感想)
- iOS项目转移到自动引用计数
- object、param标签及页面显示PDF文件的方法
- matlab中dfft,2-DFFT 
该实验的目的是开发一个 2-D FFT程序包 联合开发网 - pudn.com
- 家庭记账的最简单方法
- 我的c盘为多余的java.exejavaw.exe_java.exe,javac.exe,javaw.exe 是什么进程?
- 服务器被入侵了怎么办
- Android打包动态配置签名
- 服务器背板作用,硬盘和服务器背板
- Stimulsoft新版本2022.4 版本正式发布|附免费下载试用
- js简单交互动画,运动吧
- 计算机键盘可为哪几个区,电脑键盘分为哪几种?
- 使用 Tableau 连接到 Hortonworks Hadoop Hive
- MySQL查询优化实例
- AI大模型加持,生成式搜索来了!
- kindeditor自定义添加网络视频插件,修改批量图片上传方式flash为h5