分析總結
**在大家不辭辛勞的幫助下,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 位置對應的數字,為下取整。輸入 多組輸入,每次輸入乙個...