解题思路:本题中每一秒可以做出的选择有三种,闪现,跑步,等待,闪现的话他有蓝量的限制,这一秒能不能闪取决于蓝量还够不够,每一步的状态改变是可以影响下一步的,是一个简单动态规划问题,而跑步的话就简单了,每一秒都能开跑,基于截止到上一秒的最大位移量加上这一秒跑出去的距离就行了,因此在解决问题时候,应该同时考虑选择闪现和跑步的情况,每一秒将最大位移更新为这一秒闪现或是跑步能做出的最大位移,最后进行题目要求的条件判断就可以了

注意事项:a是用来保存跑出去后用了几秒的,如果没跑出去a不会更新,所以判断Yes的情况时,不仅要让a<t,还要让a不等于初始值,说明真的跑出去了

参考代码:

m,s,t=map(int,input().split())
blink=[0]*(t+1)#保存闪现位移
run=[0]*(t+1)#保存跑步位移
maxlong=[0]*(t+1)#每一秒最大位移量
a=0
for i in range(1,t+1):
   run[i]=maxlong[i-1]+17
   if m>=10:
       blink[i]=blink[i-1]+60#动态规划不能保证局部最优解,因此不是blink[i]=maxlong[i-1]+60
       m-=10
   else:
       blink[i]=blink[i-1]
       m+=4
   maxlong[i]=max(run[i],blink[i])
   if maxlong[i]>=s:
       a=i
       break
if a<=t and a!=0:
   print('Yes')
   print(a)
else:
   print('No')
   print(maxlong[t])

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论