问题描述
  小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面。这座大厦有一个神奇的特点,每层的高度都不一样,同时,小D也拥有一项特殊能力,可以一次向上跳跃一层或两层,但是这项能力无法连续使用。已知向上1高度消耗的时间为1,跳跃不消耗时间。由于事态紧急,小D想知道他最少需要多少时间到达顶层。
输入格式
  第一行包含一个整数n,代表楼的高度。

  接下来n行每行一个整数ai,代表i层的楼层高度(ai <= 100)。

输出格式
  输出1行,包含一个整数,表示所需的最短时间。
样例输入
5
3
5
1
8
4
样例输出
1
 
 
一开始看到这道题目时,脑子就是时间从0开始算起,加起,但是会发现,这样并不好做,而且要考虑多种多样的情况;
后来有想到倒着DP,就是从最上层开始,类似于迷宫题目,倒着找最短路径,但是这样子,会涉及到  比较很多数 的情况;
于是乎就正着做,时间从最多的开始,也就是全部加起来的时间,然后逐渐减掉时间。
 
 
  1. public class Main {
  2. /***
  3. * ___====-_ _-====___
  4. * _--^^^#####// \\#####^^^--_
  5. * _-^##########// ( ) \\##########^-_
  6. * -############// |\^^/| \\############-
  7. * _/############// (@::@) \\############\_
  8. * /#############(( \\// ))#############\
  9. * -###############\\ (oo) //###############-
  10. * -#################\\ / VV \ //#################-
  11. * -###################\\/ \//###################-
  12. * _#/|##########/\######( /\ )######/\##########|\#_
  13. * |/ |#/\#/\#/\/ \#/\##\ | | /##/\#/ \/\#/\#/\#| \|
  14. * ` |/ V V ` V \#\| | | |/#/ V ' V V \| '
  15. * ` ` ` ` / | | | | \ ' ' ' '
  16. * ( | | | | )
  17. * __\ | | | | /__
  18. * (vvv(VVV)(VVV)vvv)
  19. * 神兽保佑
  20. * 代码无BUG!
  21. */
  22.  
  23. static int compare(int a, int b, int c) {
  24. if(b == 0) return Math.min(a, c);
  25. int temp = Math.min(a, b);
  26. return Math.min(temp, c);
  27.  
  28. }
  29. public static void main(String args[]) {
  30. Scanner sc = new Scanner(System.in);
  31. int num = sc.nextInt();
  32. int[][] time = new int[num+1][3]; //存放时间
  33. int[] high = new int[num+1]; //存放楼层高度
  34. int count = 0;
  35. for(int i = 1; i <= num; i++) {
  36. high[i] = sc.nextInt();
  37. count += high[i];
  38. }
  39.  
  40. Arrays.fill(time[0], count);
  41. for(int i = 0; i < num; i++) {
  42.  
  43. time[i+1][0] = time[i][2] - high[i+1]; //第一列为上一次跳一层后,用的总时间
  44. if(i < num-1)
  45. time[i+2][1] = time[i][2] - high[i+1] - high[i+2]; //第二列为上一次跳两层后,用的总时间
  46.  
  47. time[i+1][2] = compare(time[i][0], time[i][1], time[i][2]); //第三列为爬一层后用的总时间,比较后赋值
  48. }
  49. int result = Math.min(time[num][0], time[num][1]);
  50. System.out.print(Math.min(result, time[num][2])); //输出最后一层用的总时间
  51.  
  52. }
  53. }

如果有大佬有其他方法,希望能提供代码参考,谢谢,DP不是很会。

 

ADV-302 秘密行动 java的更多相关文章

  1. 第九届极客大挑战——怎么又是江师傅的秘密(java反序列化)

    这道题其实是考jsp和java的,我没学过jsp,java倒是有一点了解,但是刚拿到题的时候还是看不懂java代码里的内容,所以去简单学习了下jsp(jsp教程),按照教程里的步骤搭建了eclipse ...

  2. Java学习-036-JavaWeb_005 -- JSP 动作标识 - forward

    JSP 动作主要作用是根据指定的动作进行相应的处理. 一.param 动作 用来给 HTML 文件和 JSP 文件传递参数的,经常和 forward.include.plugin 动作结合使用,语法格 ...

  3. Java Algorithm Problems

    Java Algorithm Problems 程序员的一天 从开始这个Github已经有将近两年时间, 很高兴这个repo可以帮到有需要的人. 我一直认为, 知识本身是无价的, 因此每逢闲暇, 我就 ...

  4. Java Socket编程如何建立两者关系

    转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...

  5. 接口测试专题(Java & jmeter & Linux基础)

    以下是我和两个朋友原创文章合集,主题是接口测试,有Java接口测试案例和jmeter的案例,还有接口测试相关服务器操作基础.欢迎点赞.关注和转发. 接口测试 httpclient处理多用户同时在线 h ...

  6. Java 程序员每天都在做什么?

    作为一名 在大.中.小微企业都待过 的 Java 开发者,今天和大家分享下自己在不同公司的工作日常和收获.包括一些个人积累的工作提升经验,以及一些 Java 学习的方法和资源. 先从我的第一份 Jav ...

  7. web前端学习部落22群分享给需要前端练手项目

    前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...

  8. Atitit jsr规范化分类 attilax总结

    Atitit jsr规范化分类 attilax总结 按照技术类别可以分成以下几类:1.Java EE (39 JSRs) --- J2EE平台规范 2.Java SE (42 JSRs) --- J2 ...

  9. HttpClient客户端网络编程——高可用、高并发

    本文是HttpClient的学习博客,RestTemplate是基于HttpClient的封装,feign可基于HttpClient进行网络通信. 那么作为较底层的客户端网络编程框架,该怎么配置使其能 ...

随机推荐

  1. 计算机二级-C语言-程序填空题-190110记录-文件写入与文件读出显示

    //给定程序功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1(独立一行)作为字符串输入结束的标志,然后将文件的内容读到显示在屏幕上.文件的读写分别由自定义 ...

  2. 主机与虚拟机连接,主机能ping通虚拟机虚拟机ping不通主机问题

    事件描述: 从物理主机ping虚拟机时,能正常返回信息.反之,从虚机ping物理主机时返回信息:Destination Host unreachable.   解决方法: 首先,是因为默认创建的虚拟机 ...

  3. 【STM32H7教程】第58章 STM32H7的硬件JPEG应用之图片解码显示

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第58章       STM32H7的硬件JPEG应用之图片解 ...

  4. 学好Linux必备知识

    鸟哥的私房菜中提到学好Linux必备的几种技能: 1.  计算器概论不硬件相关知识: 因为既然想要走Linux这门路,信息相关癿基础技能也丌能没有啊! 所以先理觋一下基础癿硬件知识,丌用一定要全懂啦! ...

  5. es 分词器介绍

    按照单词切分,不做处理 GET _analyze { "analyzer": "standard", "text": "2 run ...

  6. 吴裕雄--天生自然Numpy库学习笔记:NumPy 副本和视图

    副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置. 视图是数据的一个别称或引用,通过该别称或引用亦便可访问.操作原有数据,但原有数据不会产生拷贝.如果我们 ...

  7. 计划任务cron,date,时间同步ntp,chrony

    取出磁盘利用率最大值 ,写个脚本,做判断,只要快满了,就报警 计划周期性执行的任务提交给crond,到指定时间会自动运行 系统cron任务:系统维护作业  /etc/crontab 用户cron任务: ...

  8. 关于雷达(Radar)信道

    有些时候,我们在实际的无线网络中,会遇到无线信道一致flapping的情况,即便我们自定义了信道的,发现也会出现flapping.如果这种情况,可能需要确认是否你使用的信道上检测到了雷达. 这里记录一 ...

  9. XCOJ: 计算器

    题目地址:http://xcacm.hfut.edu.cn/problem.php?id=1251 就和表达式求值有点像,但是和杭电的哪一题不一样的是中间没有空格,那么就意味着必须通过字符串处理的方式 ...

  10. ES-9200端口与9300端口

    (1)Elasticsearch是基于lucene的全文检索服务器 (1)9300:ES节点之间的通讯使用 (2)9200:ES节点和外部通讯使用