解題思路:首先dp的套路就是先找狀態,這題也找不出其他的狀態了,只有時間乙個,所以用f[i]表示時刻i能走多遠。仔細一想實際上決策只有跑、閃現、停三種決策
然而閃現的耗藍要和跑步一同計算十分麻煩。於是把它們分開算:先算閃現的,有以下框架
for i in range(1,t)
如果藍量夠
閃現,耗藍
如果不夠
停下,回藍
接下來算走路,其實走路的只要維護之前算出的即可
因為之前已經算了只用閃現走多遠,那麼只要判斷如果這一秒不閃或者不停(因為跑步不耗藍)是否比之前更優即可
框架 for i in range(1,t)
如果這一秒走路比只閃現更優
那就走路,用走路替代閃現或停
同時,如果f[i]已經大於等於s,即逃出去了,那麼輸出並退出程式
**:
#include
using
namespace std;
const
int maxn =
500000
;int m, s, t,dp[maxn]
,flag=0;
intmain()
else
}for
(int i =
1; i <= t; i++)}
cout <<
"no"
<< endl;
cout << dp[t]
<< endl;
return0;
}
這裡解釋一下如果這一秒不閃或者不停(因為跑步不耗藍)是否比之前更優即可的含義:當輸入第二個案例後
36
25510
60120
180180
240240
240240
300300
60120
180197
240257
274291
308325
no325
我們可以看到第9s的時候有乙個比較->用閃現和跑步->如果閃現更優,那麼就直接取閃現否則取跑步 洛谷 P1095 守望者的逃離
題目描述 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶...
洛谷P1095 守望者的逃離
惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶幸的是守望...
遞推 洛谷 P1095 守望者的逃離
惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶幸的是守望...