解题思路:本题中每一秒可以做出的选择有三种,闪现,跑步,等待,闪现的话他有蓝量的限制,这一秒能不能闪取决于蓝量还够不够,每一步的状态改变是可以影响下一步的,是一个简单动态规划问题,而跑步的话就简单了,每一秒都能开跑,基于截止到上一秒的最大位移量加上这一秒跑出去的距离就行了,因此在解决问题时候,应该同时考虑选择闪现和跑步的情况,每一秒将最大位移更新为这一秒闪现或是跑步能做出的最大位移,最后进行题目要求的条件判断就可以了
注意事项: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 人评分
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:617 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:544 |
1012题解浏览:938 |
C二级辅导-同因查找 (C语言代码)浏览:618 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:620 |
班级人数 (C语言代码)浏览:981 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:538 |
A+B for Input-Output Practice (III) (C语言代码)浏览:455 |
1202题解浏览:689 |
C二级辅导-计负均正 (C语言代码)浏览:664 |