守望者的逃离

描述

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

你的任务写写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望
者在剩下的时间能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)为单位,且每
次活动的持续时间为整数秒。距离的单位为米(m)。

格式

输入格式

在输入文件escape.in仅一行,包括空格隔开的三个非负整数M,S,T。

输出格式

在输出文件escape.out包括两行: 
第1行为字符串“Yes”或“No”(区分大小写),即守望者是否能逃离荒岛。 
第2行包含一个整数。第一行为“Yes”(区分大小写)时表示守望者逃离荒岛的最短时间;
第一行为“No”(区分大小写)时表示守望者能走的最远距离。

样例1

样例输入1

39 200 4

样例输出1

No
197

样例2

样例输入2

36 255 10

样例输出2

Yes
6

限制

1s

提示

30%的数据满足:1<=T<=10,1<=S<=100 
50%的数据满足:1<=T<=1000,1<=S<=10000 
100%的数据满足:1<=T<=300000,0<=M<=1000,1<=S<=10^8

这题可以用贪心做,但我觉得DP更严谨,正确性更高

#include <algorithm>
#include <iostream>
using namespace std;
//ifstream cin("escape.in",ios :: in);
//ofstream cout("escape.out",ios :: out);
int m,s,t,MaxDist;
struct DP {
  int f,g,m;
  /*
  dp[t].f:表示在t秒最远距离
  dp[t].g:表示在t秒只闪烁的最远距离
  dp[t].m:表示在t秒最大魔法
  */
}dp[300001];
int main() {
  ios :: sync_with_stdio(false);
  cin >> m >> s >> t;
  dp[0].f = dp[0].g = 0;
  dp[0].m = m;
  for (int i = 1;i <= t;i++) {
    if (dp[i-1].m >= 10) {  //可以闪烁
      dp[i].m = dp[i-1].m-10;
      dp[i].g = dp[i-1].g+60;
    } else {  //否则休息
      dp[i].m = dp[i-1].m+4;
      dp[i].g = dp[i-1].g;
    }
    dp[i].f = max(dp[i-1].f+17/*走路*/,dp[i].g/*闪烁*/);
  }
  if (dp[t].f < s) {  //不能逃离
    cout << "No\n" << dp[t].f;
    return 0;
  }
  while (dp[t].f >= s) t--;  //得到最小时间
  cout << "Yes\n" << ++t;
  return 0;
}

最新文章

  1. (整理)MyBatis入门教程(一)
  2. 安装Oracle 12c精简客户端(不带数据库)
  3. 回文字符串的判断!关于strlen(char * str)函数
  4. python 使用总结
  5. DIOCP之DEMO学习顺序及达到要求
  6. socket基础
  7. BZOJ 1406: [AHOI2007]密码箱( 数论 )
  8. 解决MVC中JsonResult返回 弹出文件下载对话框
  9. c++中string.erase()函数的用法(转)
  10. 使用jquery.form.js提交表单上传文件
  11. 从零开始一起学习SLAM | 掌握g2o顶点编程套路
  12. data science学习笔记1
  13. Entrust - Laravel 用户权限系统解决方案
  14. js前台遍历后台返回的Datatable数据
  15. SSRS 在使用矩阵的时候,隐藏掉一列空白值
  16. 180727-时序数据库InfluxDB之备份和恢复策略
  17. shell 从变量中切割字符串
  18. 【BZOJ3611】大工程(虚树,动态规划)
  19. ryu的RESTAPI简介——我主要用于下发和查看流表
  20. java语言基础第二讲 课程作业02 总结

热门文章

  1. voa 2015 / 4 / 15
  2. ansible学习之路
  3. tag上、push上和pull 取Docker 映像
  4. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
  5. openjudge8465:马走日 [搜索]
  6. spring 页面跳转
  7. (转)上传jar包到nexus私服
  8. (转)Java线程:新特征-线程池
  9. 阿里云服务器怎么运行多个项目(Nginx)
  10. Hibernate的事务处理机制和flush方法的用法