noip2007 pjt3 守望者的逃離

2022-05-20 04:32:51 字數 2132 閱讀 4258

描述惡魔獵手尤迪安野心勃勃,他背叛了暗夜精靈,率領深藏在海底的娜迦族企圖叛變。守望者

在與尤迪安的交鋒中遭遇了圍殺,被困在乙個荒蕪的大島上。為了殺死守望者,尤迪安開始對這

個荒島施咒,這座島很快就會沉下去。到那時,島上的所有人都會遇難。守望者的跑步速度為

17m/s,以這樣的速度是無法逃離荒島的。慶幸的是守望者擁有閃爍法術,可在1s內移動60m,不

過每次使用閃爍法術都會消耗魔法值10點。守望者的魔法值恢復的速度為4點/s,只有處在原地

休息狀態時才能恢復。

現在已知守望者的魔法初值m,他所在的初始位置與島的出口之間的距離s,島沉沒的時間t。你的任務寫寫乙個程式幫助守望者計算如何在最短的時間內逃離荒島,若不能逃出,則輸出守望

者在剩下的時間能走的最遠距離。注意:守望者跑步、閃爍或休息活動均以秒(s)為單位,且每

次活動的持續時間為整數秒。距離的單位為公尺(m)。

在輸入檔案escape.in僅一行,包括空格隔開的三個非負整數m,s,t。

在輸出檔案escape.out包括兩行:

第1行為字串「yes」或「no」(區分大小寫),即守望者是否能逃離荒島。

第2行包含乙個整數。第一行為「yes」(區分大小寫)時表示守望者逃離荒島的最短時間;

第一行為「no」(區分大小寫)時表示守望者能走的最遠距離。

36 255 10
yes

6

資料範圍30%的資料滿足:1<=t<=10,1<=s<=100

50%的資料滿足:1<=t<=1000,1<=s<=10000

100%的資料滿足:1<=t<=300000,0<=m<=1000,1<=s<=10^8

一開始直接搜尋所有情況,果斷tle

1 #include2 #include3 #include4 #include5

using

namespace

std;67

int ans=-1;//

最短時間

8int

st_v,dis,time,ans;

9int longest_dis=0

,shortest_time;

10bool found=0;11

12void dp(int t,int mark,int dis,int

delta)

17if (dis>=dis)

22 dp(t+1,mark,dis+17,17

);23 dp(t+1,mark+4,dis,0

);24

if (mark>=10

)25 dp(t+1,mark-10,dis+60,60

);26}27

28int

main()

view code

然後開始思考剪枝,是否能夠去掉某些情況?

後來發現就是一道貪心

1 #include2 #include3 #include4 #include5

using

namespace

std;67

int ans=-1;//

最短時間

8int

st_v,dis,time,ans;

9int longest_dis=0

,shortest_time;

10bool found=0;11

12void dp(int t,int mark,int dis,int

delta)

17if (dis>=dis)//

邊界條件

22int

cnt;

23//

貪心24

if (mark>=10

)25 dp(t+1,mark-10,dis+60,60);//

還有足夠魔法值用法術時,毫無疑問使用法術

26else37}

38}39int

main()

view code

總結

貪心求解時,對於可能發生的情況需比較、考慮全面,同時注意題目的要求

黃學長簡潔的做法也值得借鑑

紀念品分組 NOIP2007PJT2

時間限制 1 sec 記憶體限制 128 mb 提交 55 解決 28 提交 狀態 討論版 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定...

noip2007 獎學金 (排序)

a1159.獎學金 時間限制 1.0s 記憶體限制 256.0mb 總提交次數 797ac次數 339 平均分 60.95 將本題分享到 檢視未格式化的試題 提交試題討論 試題 noip2007 普及組 問題描述 某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,...

NOIP2007解題報告

第一題 某次科研調查時得到了n個自然數,每個數均不超過1500000000 1.5 109 已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,並按照自然數從小到大的順序輸出統計結果。解題過程 直接sort快拍然後掃瞄一遍即可。第二題 在初賽普及組的 閱讀程式寫結果 的問題中,我...