計蒜客 2137 守望者的距離(dp)

2021-10-23 03:10:15 字數 1419 閱讀 9766

a的跑步速度為 17m/s,以這樣的速度是無法逃離荒島的。慶幸的是a擁有閃爍法術,可在 1s 內移動 60m,不過每次使用閃爍法術都會消耗魔法值 1010 點。a的魔法值恢復的速度為 44 點 /s/s,只有處在原地休息狀態時才能恢復。

現在已知a的魔法初值 mm,他所在的初始位置與島的出口之間的距離 ss,島沉沒的時間 tt。你的任務是寫乙個程式幫助a計算如何在最短的時間內逃離荒島,若不能逃出,則輸出a在剩下的時間內能走的最遠距離。注意:a跑步、閃爍或休息活動均以秒( ss )為單位,且每次活動的持續時間為整數秒。距離的單位為公尺( mm )。

輸入格式

包括空格隔開的三個非負整數 m,s,tm,s,t。

輸出格式

第 11 行為字串"yes"或"no"(區分大小寫),即a是否能逃離荒島。

第 22 行包含乙個整數。第一行為"yes"(區分大小寫)時表示a逃離荒島的最短時間;第一行為"no"(區分大小寫)時表示a能走的最遠距離。

資料範圍

30%30% 的資料滿足:1 \le t \le 10, 1 \le s \le 1001≤t≤10,1≤s≤100;

50%50% 的資料滿足:1 \le t \le 1000, 1 \le s \le 100001≤t≤1000,1≤s≤10000;

100%100% 的資料滿足:1 \le t \le 300000, 0 \le m \le 1000, 1 \le s \le 10^81≤t≤300000,0≤m≤1000,1≤s≤108。

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入1複製

39 200 4

樣例輸出1複製

no197

樣例輸入2複製

36 255 10

樣例輸出2複製

yes6

本題可以利用dp陣列來選取最優狀態

#include

using

namespace std;

const

int max_n=

3e5+

500;

int m,s,t;

int dp1[max_n]

,dp2[max_n];/*

相當於分成兩個人來賽跑,每一秒之內都利用最佳策略,也就是跑的最多

的方法來跑步。

*/int

main()

else

//選取同一時間能到達的最遠距離 ,同時閃現和正常也是矛盾的

//智慧型取其一

dp1[i]

=max

(dp1[i-1]

+17,dp2[i]);

if(dp1[i]

>=s)

break;}

if(i<=t)

else

return0;

}

計蒜客 守望者的逃離 (貪心)

惡魔獵手尤迫安野心勃勃。他背叛了暗夜精靈,率深藏在海底的那加企圖叛變 守望者在與尤迪安的交鋒中遭遇了圍殺.被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去,到那時,刀上的所有人都會遇難 守望者的跑步速度,為 17m s17 m s17 m s,以這樣的速度是無法...

DP 守望者的逃離

description 惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為 17m s,以這樣的速度是無...

P1095 守望者的逃離 暴力DP

狀態dp i 表示i時刻只用魔法的最遠距離。對於跑步,只需要利用處理好的dp維護一下。其正確性基於貪心策略,長遠的考慮,一定是用魔法的距離比跑步好,但是在個別情況,休息的過程時就有可能不如跑步,因此加入跑步來動態維護,如果大於s了就及時退出。容易知道有跑步參與答案一定是只參與最後一次跑步的。需要一點...