21计科程一帆


私信TA

用户名:uq_88617846948

访问量:5276

签 名:

搞哥毛哥在上,俺寻思俺是一个最大最强的技术小子

等  级
排  名 958
经  验 3423
参赛次数 2
文章发表 52
年  龄 19
在职情况 学生
学  校 石河子大学
专  业 计算机科学与技术

  自我简介:

憨憨一个,欢迎大佬指正

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

注意事项: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分

1 人评分

  评论区

  • «
  • »