題目:
普通的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 設當一部分花被移走後,剩下的花的高度依...