week13 TT的獎勵 動態規劃

2021-10-06 08:00:38 字數 1559 閱讀 5840

分析總結

**在大家不辭辛勞的幫助下,tt 順利地完成了所有的神秘任務。

神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。

撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 [0, 10] 範圍內,具體的座標範圍如下圖所示。

tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接住,貓咪就會跑掉。例如,在剛開始的一秒內,tt 只能接到

四、五、六這三個位置其中乙個位置的貓咪。

喜愛貓咪的 tt 想要接住盡可能多的貓咪,你能幫幫他嗎?

多組樣例。每組樣例輸入乙個 m (0 < m < 100000),表示有 m 只貓咪。

在接下來的 m 行中,每行有兩個整數 a b (0 < b < 100000),表示在第 b 秒的時候有乙隻貓咪掉落在 a 點上。

注意,同乙個點上同一秒可能掉落多隻貓咪。m = 0 時輸入結束。

輸出乙個整數 x,表示 tt 可能接住的最多的貓咪數。

65 1

4 16 1

7 27 2

8 30

一道動態規劃的題目。

最開始讀著稍稍有點懵,意思其實就是tt在任意一秒中,他可以接到他所在位置、所在位置左邊和所在位置右邊三個地方中的乙個處所掉下的貓咪。

而題目所要求的是tt累計接到的貓咪數量最大,因此就存在了最佳解與每個子狀態之間的關聯。敏銳的直覺你都能感覺這必定是一道動態規劃。

ans[i][j]表示在第i秒在j處累計接住的貓咪數量

狀態轉移方程:

ans[i][j] += max(ans[i + 1][j],max(ans[i + 1][j + 1],ans[i + 1][j - 1])));

此處用到了0-1揹包問題中提到的滾動陣列思想。通過分析可知,每一秒在任意地方累計所能接到貓咪的數量 = tt不在該處時所接數量 + tt在當前位置時可選擇的三處中所能接到最大貓咪數量。因此倒序遍歷所有時間點,保證第i秒前的答案不會被影響,直到起始時間起始位置即為答案。

因此在初始化時,應將每一處指定要在某一時間點掉下的貓儲存到對應ans陣列中。因為這代表著tt在第b時間點在第a處一定可以接到的貓。

為什麼我老是看不到多組數例呢【???】

動態規劃是真的玄學哎

//

// main.cpp

// lab3

////

#include

#include

#include

using

namespace std;

int ans[

100002][

11];int

main()

//滾動陣列

//逆向遍歷時間

for(

int i = max_time -

1; i >=

0; i--)}

cout<

[5]<

//輸出起始時間起始位置記錄的答案

cin>>m;

}return0;

}

week13 C TT 的獎勵(必做)

在大家不辭辛勞的幫助下,tt 順利地完成了所有的神秘任務。神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 0,10 範圍內,具體的座標範圍如下圖所示。tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接...

Week13作業 C TT的獎勵 dp

在大家不辭辛勞的幫助下,tt 順利地完成了所有的神秘任務。神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 0,10 範圍內的整數。tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接住,貓咪就會跑掉。例...

TT的神秘禮物 Week4作業C題

給定乙個 n 個數的陣列 cat i 並用這個陣列生成乙個新陣列 ans i 新陣列定義為對於任意的 i,j 且 i j,均有 ans abs cat i cat j 1 i j n。試求出這個新陣列的中位數,中位數即為排序之後 len 1 2 位置對應的數字,為下取整。輸入 多組輸入,每次輸入乙個...