洛谷 P1095 守望者的逃離(貪心 dp)

2022-06-09 06:39:09 字數 1104 閱讀 1655

這個題自己沒有做出來,看的luogu裡面dalao們的題解,感觸很深。實際上這個題,有貪心的思想,也有dp的思想。

當時看到這個題就想到了貪心,能閃爍就閃爍,但是沒想明白在體力不夠的時候該做什麼。

看了題解之後,知道了如果遇見這種問題,可以同時開兩個變數進行嘗試,乙個一直閃,沒體力就恢復體力。另乙個就一直走。

如果某乙個時刻閃爍的距離大於了走的距離,那麼就更新走的距離。這樣,就是閃、恢復體力、走三者的最優搭配。

1 #include 2 #include 3

using

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 3

using

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,以這樣的速度是無法逃離荒島的。慶幸的是守望...