方伯伯的玉公尺田

2021-08-20 14:43:47 字數 2627 閱讀 4073

例題:方伯伯的玉公尺田

一位大佬的鏈結(有關二維樹狀陣列)

關於我做這道題的心路歷程:

1.我在某個晚上準備練習dp題,看到方伯伯的玉公尺田這

道題,難度適宜,知識簡單,準備做一做。乙個晚上過去

了,我除了推出了他每一次會抬高最右邊的玉公尺外,還推

出了一大堆錯誤結論,例如一定會從已有的上公升序列中的

左端點抬高啦。甚至還想,這不會是貪心題吧.

2.第二個晚上,我搞出了一大堆dp方程,就剩最後怎麼

處理高度的問題。結果這個狀態轉移怎麼也想不出。最後

看題解,發現越看越糊塗,無聊之中點開了乙個題解的鏈

接。這是我轉機的開始(要是沒點開,可能我一輩子都做

不出)首先我發現他的題解寫錯了 然後我發現我把題看錯了。

不少大佬的題解都一開始說明f[i][j]指的是第i個點被覆蓋j次的最大不下降序列。這其實就是這道題的列舉思路,然而並不需要寫在**中(ps.很多題都是這樣),這也就要是說,dp方程與他無關。

這就會有疑問:為什麼無關?

還記得揹包優化嗎?

滾動陣列使得一維消失了,因而從dp方程看上去,與列舉到哪乙個物品無關。本題同樣如此。這也使得在列舉剩餘維度是一定要注重順序。

接下來,將用到性質一:每次考慮抬高一段區間,我們都視這段區間的右端點為n

證明:

考慮從 l 開始抬高,當我們抬高到r,會對原有的上公升子串行有兩個影響

1. 1-l的序列中的每乙個數,它右邊比它大的數與抬

高前相比,有增多的趨勢。我們稱這對產生最長不下降子串行

有有利影響

2. r-n的每乙個數,他前邊比它小的數有減少趨勢。我們

稱這對產生最長不下降子串行有不利影響。

這就可以發現,我們把r定為n時,沒有不利影響。
這就相當於,我們到乙個點,就可以列舉它被抬高了幾次。我們把區間的抬高轉化為了點的抬高。

性質2:當前列舉到的點i,在它為j次抬高時,以他為終點的不下降子串行由前邊任意乙個比它抬高後矮的點x+1取max得來

這個看上去容易得到,其實把這個想通了,這道題做了一半。

首先,在實際寫法中,需測判這個點x抬高次數是否小於j;

否則對於這樣一組資料 4 1 2 1 4 3會出錯。

實際上有了這兩個性質後,我們就可以初步列出方程f[

i][j

][k]

=maxp=

1i−1

f[p]

[j′]

[k′]

(j′+

k′k,k′

f [i

][j]

[k]=

maxp=1

i−1f

[p][

j′][

k′](

j′+k

k,k′

可以看出這是乙個三維轉移方程,然而,我們發現

1. 我們大的高度總是由小的高度推出

1. 我們不關注每個位置具體的情況,我們只要求得最終答案即可。

介於上述兩點,我們可以考慮降維。但我們從大的高度列舉到小的高度時,因為對每個位置的列舉是有序,先列舉的大高度又不會影響後列舉的小高度。

轉移方程即為下述 f[

j][k

]=maxj′+

k′kf[j

′][k

′](k

′f [j

][k]

=maxj′

+k

kf[j

′][k

′](k

做到這裡,已有了乙個欠優的**,考慮求max,可用二維樹狀陣列優化後,降到(l

og2n

)2( lo

g2n)

2關於二維樹狀陣列,前面的大佬鏈結有詳細的解釋,也可以看我的另一篇部落格。我們可以模擬一維。一維樹狀陣列可以讓我們在lo

g2n log

2n

的時間進行修改與查詢線狀的一條字首和,二維樹狀陣列能讓我們在(l

og2n

)2( lo

g2n)

2內進行乙個矩形面積的查詢。

#include

#define ll long long

#define rg register

#define il inline

#define maxn 10000

using namespace std;

il int read()

return data;

}il int lowbit(int k)

int n,k,mh;

int btree[maxn][maxn],h[maxn];

void fix(rg int ii,rg int jj,rg int x)

int query(rg int ii,rg int jj)

int main()

rg int ans=0;

for(rg int i=1;i<=n;++i)

}printf("%d",ans);

}

方伯伯的玉公尺田 SCOI2014

方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有n株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高1單位高度...

方伯伯的玉公尺田 SCOI2014

方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有 n 株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高 1 ...

bzoj 3594 方伯伯的玉公尺田

開始覺得自己好不容易想出一道題,後來發現自己是錯的。用f i j 表示前i個玉公尺,發動j次技能最多能留下的玉公尺數。但是這個東西可以由j 1 i 1中任意乙個數轉移來,所以用樹狀陣列優化dp f i j f p q 1 p p q include include include include i...