BZOJ2131 免費的餡餅 樹狀陣列優化DP

2021-08-09 12:19:28 字數 978 閱讀 7430

真的…好睏啊…!

晚自習時間的日常犯睏=a=

bzoj2131傳送門

乙個豎直的二維平面裡,有寶物不斷地從上面掉下來。第i個寶物下降到平面底部的時間為ti,位置為pi,寶物價值為vi。

你作為乙個玩家,要在這個豎直平面的底部接住足夠的寶物來獲取最高的價值。你可以在平面底部移動,並且你的速度最大為:2單位/單位時間。初始時間你可以在平面底部的任意乙個位置。

現在給定上述所有資訊,需要求出可獲得的最大價值。

第一行輸入平面底部寬度w(≤1e8)和寶物個數n(≤1e5)

接下來n行每行三個整數ti,pi,vi,含意同上

輸出最大價值

看到w這種範圍,大概猜到要麼是o(n)題,要麼就是和w沒什麼關係…

然後這是一道dp題【顯然】

定義dp[i][j]表示第i個物品落下時,在j位置可獲得最大價值。

很容易看出來 dp

[i][

j]=m

ax(d

p[i−

1][k

])+v

[i](

|j−k

|≤2∗

δt)

然後發現第一維可以不要,存座標就可以了,每次可以在原來的基礎上更新。

但是這個更新條件很奇怪,帶有絕對值,於是咱們把絕對值拆開,然後再移項。對於兩個物品i,j來說(假設i在j之後落下),如果j可以轉移到i,則有

}o[100005] ;

struct unique_data

}uni[100005] ;

class bit

int query( int x )

void init()

private :

int num[100005] ;

}b;void unique_()

}void solve()

int main()

unique_() ;

solve() ;

}

bzoj2131 免費的餡餅

智障一般的操作,拆絕對值都忘了。數學沒救了。最後貌似是用的幾何意義推出來的。轉移的條件是 t i t j 並且abs p i p j 2 t i t j 顯然前面那個可以不考慮。然後你把每個狀態看作乙個二維平面上的點nd i 2 t i p i 移向不難發現 nd i 能夠轉移的點就是y x,y x...

bzoj 2131 免費的餡餅

易得方程 f i max f j v i 條件是 t i 一共有 3 個條件,但是你發現如果滿足後面兩個條件,自然滿足第乙個條件.所以可以將問題轉化為乙個二位偏序問題,離線 樹狀陣列處理一下即可.code include define n 100007 define ll long long usi...

bzoj2131 免費的餡餅

首先我們很容易看出是乙個dp 然後容易看出是資料結構優化dp 但是這個限制條件有點鬼畜 abs p i p j 2 t i t j p i p j t i 2 p i t j 2 p j p i t i 2 p i t j 2 p j 這樣的話我只會樹套樹 後來想想帶修主席樹應該也行?信仰不夠去 題...