直接按餡餅暴力dp o(n^2)顯然不能ac,因為n最大有100000
然後上網查了題解,直接按照dp的轉移方程化出乙個公式,然後發現是在乙個類似於二維的平面圖上進行轉移
然後通過一維先後進行更新,一維直接樹狀陣列維護完美ac,不得不說從公式推導到優化都很巧妙
orz看來我還是太弱了
#include#include#include#includeusing namespace std;
const int m=100003;
int low(int x)
int w,n,ans;
int d[m],f[m],y[m];
struct oselse
sort(a,a+n+1);
for(int i=0;i<=n;i++)
sort(y,y+n+1);
for(int i=0;i<=n;i++)
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
cout<
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 這樣的話我只會樹套樹 後來想想帶修主席樹應該也行?信仰不夠去 題...