洛谷 P1970 花匠 DP

2022-05-12 10:53:25 字數 696 閱讀 5634

題目:

普通的dp,f[i][0/1] 表示 i 處處於較小或較大的長度;

注意:1.樹狀陣列向後 query 時不能有0,所以讀入的 h[i] 都+1;

2.可能有相同的高度!所以 query 時注意 +1,-1。

**如下:

#include#include

#include

#include

using

namespace

std;

intconst maxn=1e5+5,maxm=1e6+5

;int n,h[maxn],f[maxn][3

],t1[maxm],t0[maxm],ans,mx;

intrd()

while(ch>='

0'&&ch<='

9')ret=(ret<<3)+(ret<<1)+ch-'

0',ch=getchar();

return ret*f;

}void add0(int x,int val)

void add1(int x,int val)

int query0(int x)

int query1(int x)

intmain()

printf(

"%d\n

",ans);

return0;

}

洛谷p1970花匠

原題 一共兩種情況,分別畫圖模擬一下就可以很快想出思路,線性dp分情況討論 波峰與波谷交替出現,比如現在正在求f i 那麼尋找i之前比他矮 那麼他就是波峰 或比他高 他是波谷 取最大值存入,並且記錄他是波谷還是波峰。不難實現,看懂思路就好。include include include includ...

洛谷 P1970 花匠

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定 把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希 望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h1,h2.hn。設當一部分花被移走後,剩下的花的高度依次為g1,g2.g...

洛谷 P1970 花匠 線性dp

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h nh1 h2 hn 設當一部分花被移走後,剩下的花的高度依...