這個題自己沒有做出來,看的luogu裡面dalao們的題解,感觸很深。實際上這個題,有貪心的思想,也有dp的思想。
當時看到這個題就想到了貪心,能閃爍就閃爍,但是沒想明白在體力不夠的時候該做什麼。
看了題解之後,知道了如果遇見這種問題,可以同時開兩個變數進行嘗試,乙個一直閃,沒體力就恢復體力。另乙個就一直走。
如果某乙個時刻閃爍的距離大於了走的距離,那麼就更新走的距離。這樣,就是閃、恢復體力、走三者的最優搭配。
1 #include 2 #include 3using
namespace
std;
4int
main()else energy+=4
;15 s1 =max(s1,s2);
16 time--;17}
18if(s1 >= dis)cout<<"
yes"
19else cout<<"no"
20return0;
21 }
如何驗證貪心演算法的正確性?
其實可以把閃爍的距離換一種理解方式: 閃爍的次數。因為閃爍次數固定了,閃爍的距離也就固定了。那麼,s2變數實際上是在模擬當前時間內最大閃爍次數,而s1變數則是在模擬不閃爍、純粹走路下當前時間內走的距離。如果在某乙個時刻,發現s1 > s2了,說明在當前時間下,0次閃爍的行動距離小於若干次閃爍的行動距離。那麼更新s1好了,讓它等於s2。並繼續模擬,s1還是不斷的自增17,s2還是努力地試圖再進行一次閃爍。
或許將s2變數改為閃爍次數更易理解這個演算法。
狀態轉移方程....還沒想出來。
1 #include 2 #include 3using
namespace
std;
4int
main()else energy+=4
;16 s = max(s,flash_cnt*60
);17 time--;18}
19if(s >= dis)cout<<"
yes"
20else cout<<"no"
21 }
我還是太菜了........
洛谷 P1095 守望者的逃離
題目描述 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶...
洛谷P1095 守望者的逃離
惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶幸的是守望...
遞推 洛谷 P1095 守望者的逃離
惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為17m s,以這樣的速度是無法逃離荒島的。慶幸的是守望...