在大家不辭辛勞的幫助下,tt 順利地完成了所有的神秘任務。
神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。
撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 [0, 10] 範圍內的整數。
tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接住,貓咪就會跑掉。例如,在剛開始的一秒內,tt 只能接到
四、五、六這三個位置其中乙個位置的貓咪。
喜愛貓咪的 tt 想要接住盡可能多的貓咪,你能幫幫他嗎?
多組樣例。每組樣例輸入乙個 m (0 < m < 100000),表示有 m 只貓咪。
在接下來的 m 行中,每行有兩個整數 a b (0 < b < 100000),表示在第 b 秒的時候有乙隻貓咪掉落在 a 點上。
注意,同乙個點上同一秒可能掉落多隻貓咪。m = 0 時輸入結束。
輸出乙個整數 x,表示 tt 可能接住的最多的貓咪數。
令f[i][j]是在i座標第j秒接到的最大貓咪數,則f[i][j]=max+mm[i][j]。邊界0和10要去掉乙個f。
發現可以優化掉j,即對j=1~maxb(b的最大值),f[i]=max+mm[i][j],其中last[i]是j-1時的f[i]。
注意一開始位置是5,每一秒最多移動一格距離,也就是說前5秒應特殊處理,第2秒能到3-7,第3秒能到2-8,第4秒能到1-9,第5秒能到0-10。
最後答案就是max。
一道簡單的dp題,狀態方程很好列。
#include
using
namespace std;
int m,a,b;
int mm[11]
[100010];
int maxb;
int f[11]
,last[11]
;int ans;
//f[i][j]是在i座標第j秒接到的貓咪
//f[i][j]=max+mm[i][j]
//優化掉j
//j=1~maxb
//f[i]=max+mm[i][j]
intmain()
//初始化,一開始位置為5
last[4]
=mm[4]
[1],last[5]
=mm[5]
[1],last[6]
=mm[6]
[1];
//前5秒特殊處理
for(
int j=
2;j<=
5;j++
)for
(int i=
5-j;i<=
5+j;i++
) last[i]
=f[i];}
//處理6秒及以後
for(
int j=
6;j<=maxb;j++
)for
(int i=
0;i<=
10;i++
) last[i]
=f[i];}
for(
int i=
0;i<=
10;i++)if
(ans) ans=f[i]
; cout<}}
Week13作業 選做題D
題意 在大家的三連助攻下,tt 一舉獲得了超級多的貓咪,因此決定開一間貓咖,將快樂與大家一同分享。並且在開業的那一天,為了紀念這個日子,tt 在貓咖門口種了一棵蘋果樹。一年後,蘋果熟了,到了該摘蘋果的日子了。已知樹上共有 n 個節點,每個節點對應乙個快樂值為 w i 的蘋果,為了可持續發展,tt 要...
week13 C TT 的獎勵(必做)
在大家不辭辛勞的幫助下,tt 順利地完成了所有的神秘任務。神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 0,10 範圍內,具體的座標範圍如下圖所示。tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接...
Week13 作業 必做
a tt 的神秘任務1 這一天,tt 遇到了乙個神秘人。神秘人給了兩個數字,分別表示 n 和 k,並要求 tt 給出 k 個奇偶性相同的正整數,使得其和等於 n。例如 n 10,k 3,答案可以為 4 2 4 tt 覺得這個任務太簡單了,不願意做,你能幫他完成嗎?本題是spj input 第一行乙個...