题目:

恶魔猎手尤迪安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去,到那时,岛上的所有人都会遇难:守望者的跑步速度,为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。

现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)为单位。且每次活动的持续时间为整数秒。距离的单位为米(m)。

1 <= t <= 300000, 0 <= m<=1000 1 <=s <= 10^8

解题思路:(动态规划+滚动数组)

每一秒的选择只能有三种(走路,闪烁,回蓝),所以按照时间来动规

f[i,j]表示第i秒最多使用j点魔法值跑的最远距离

f[i,j]=max{f[i-1][j]+17(走路),f[i-1][j-10]+60(闪烁),f[i-1][j+4](回蓝)}

回蓝可以理解为前i秒中某一秒用来回蓝,这一秒用来闪烁或者走路能走的最远距离

package huawei;/*
功能:判断守望者是否能够逃出荒岛输入参数:int uiMagic:整型,守望者的初始魔法值int uiDistance:整型,守望者所在的初始位置与岛出口之间的距离。int uiSec:整型,岛沉没需要的时间,单位为秒StringBuilder pRstOut:保证传入的是空的StringBuilder对象,要求把结果加入,输出守望者能否逃出荒岛,若能逃出输出“Yes”,不能输出“No”,注意大小写。
返回值:若守望者能逃出荒岛,输出逃出荒岛所用的最短时间,不能逃出则输出守望者能逃出的最大距离。
*/public class Demo
{private int[][] dp=new int[2][1005];private void Initial(){for(int i=0;i<2;i++){for(int j=0;j<1005;j++)dp[i][j]=0;}}public int helpWatcherEscape(int uiMagic, int uiDistance, int uiSec,StringBuilder pRstOut){Initial();boolean EscapeSucceed=false;int i,flag=1;for(i=1;i<=uiSec;i++){int max=-1;for(int j=0;j<=uiMagic;j++){int now=1-flag;if(max<dp[now][j]+17)max=dp[now][j]+17;if(j>=10&&max<dp[now][j-10]+60)max=dp[now][j-10]+60;if(j>=4&&max<dp[now][j+4])max=dp[now][j+4];dp[flag][j]=max;if(dp[flag][j]>=uiDistance){EscapeSucceed=true;break;}}flag=1-flag;if(EscapeSucceed)break;}if(pRstOut==null)pRstOut=new StringBuilder();if(EscapeSucceed){pRstOut.append("Yes");return i;}else{pRstOut.append("No");return dp[uiSec&1][uiMagic];}}
}

守望者的逃离 动态规划+滚动数组相关推荐

  1. 动态规划/滚动数组/通项公式——爬楼梯

    一.题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 二.思路解析 1.迭代 第n个台阶只能从第n-1或者n-2个上来.到第 ...

  2. 【USACO3.1.6】邮票 动态规划/滚动数组

    bool类型:f[i][j]  i这个数额,由j个邮票贴成 是否可行.  f[i][j] = { f[i - p][j - 1] 其中有一个是true即可,p为邮票面额} 换一个思路 f[i]  i这 ...

  3. 守望者的逃离 贪心 动态规划

    守望者的逃离 动态规划 贪心 题目链接https://www.luogu.com.cn/problem/P1095 题目描述: 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变 ...

  4. 01背包问题(当有的背包重量是非整数时)的递归(优化成动态规划+再用滚动数组优化)解法+一些动态规划(递归,搜索)的高级技巧

    当背包重量是整数时,动态规划可以用数组存储状态就可以了. 当背包重量是非整数时,用map存储状态就可以了!主要思路:  map(构造函数中参数comp是仿函数(或者叫函数对象))+递归优化(" ...

  5. [动态规划] 守望者的逃离

    今天来给大家讲守望者的逃离这道题 先上题目 题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望 ...

  6. 《滚动数组》---滚动数组思想,运用在动态规划当中

    滚动数组是DP中的一种编程思想.简单的理解就是让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用.起到优化空间,主要应用在递推或动态规划中(如01背包问题).因为DP题目是一 ...

  7. 【LeetCode笔记】494. 目标和(Java、动态规划、背包问题、滚动数组)

    文章目录 题目描述 思路 && 代码 1. 动态规划 O(n2n^2n2).O(n2n^2n2)(最方便理解,初版) 2. 转换成 01 背包问题 O(n2n^2n2).O(nnn) ...

  8. 【LeetCode笔记】416. 分割等和子集(Java、动态规划、背包问题、滚动数组)

    文章目录 题目描述 思路 && 代码 1. 动态规划 O(nc) .O(nc) 2. 结合滚动数组 O(nc).O(c) 二刷 打卡第十四天-熬夜也得把题目补上= = 题目描述 初看题 ...

  9. 算法基础:动态规划数组中滚动数组的使用

    这篇文章继续在前一篇文章的基础上介绍动态规划数组的优化方式.很多基础算法本来都是写给我家的小少年看的,结果发现后浪学习的速度远远超出我的想象,在一个周末用这篇文章来纪念一下吧. 目录 斐波那契数列 d ...

最新文章

  1. 图灵奖获得者 Alan Kay:突破常规思维,创建下一代科研社区(附视频)
  2. 2 datax mysql 和 mysql之间相互导入
  3. tarjan算法_【朝夕的ACM笔记】树上问题-最近公共祖先-倍增算法
  4. MFC匿名管道原理详解、函数总结、调用实例(用MFC的匿名管道读取CMD输出内容)(C++语言)
  5. Java——线程的创建,线程池
  6. 耳语(Whisper) app数据泄露致9亿个私密自白曝光:该怎么办?
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的共享自习室预约管理系统
  8. 什么是面向过程?什么是面向对象?面向对象的三大基本特征是什么?
  9. With great power comes great responsibility
  10. Mybatis复杂参数传参取参方式总结
  11. 论文阅读:Vision GNN: An Image is Worth Graph of Nodes
  12. 速卖通关键词挖掘工具_2020网站关键词挖掘工具有哪些
  13. Kconfig语法学习
  14. 进程间通信有哪几种方式?
  15. 数字孪生典型应用案例
  16. ios获取本地音乐库音乐很详细
  17. 远程监控养猪监控系统
  18. mysql主从配置干什么_mysql主从配置之slave_exec_mode=IDEMPOTENT详解
  19. java计算机毕业设计教师管理系统源码+mysql数据库+系统+lw文档+部署
  20. Node Sass找不到您当前环境的绑定

热门文章

  1. 惠普暗影精灵Plus 3代 (OMEN 17-an014TX)参数
  2. 在命令行窗口中打开win10的显示设置
  3. POI 单元格垂直居中,相同内容的单元格合并
  4. 怎样完成MES系统实施?
  5. iPhone6 iPhone6 Plus 屏幕分辨率、尺寸的问题
  6. 五款免费同步备份软件介绍
  7. 可视计算机应用期末考试,职称计算机考试photoshop考试习题复习
  8. 小小知识点(一):辨别性相似度(Discriminative Similarity)
  9. 教你如何编辑修改PDF文件内容
  10. 计算机模拟专业委员会,中国化工学会过程模拟及仿真专业委员会成立大会召开...