洛谷p1970花匠

2021-08-07 14:39:01 字數 813 閱讀 4082

原題

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

**不難實現,看懂思路就好。

#include#include#include#include#includeusing namespace std;

int n,a[100007],f[100007],maxx=0,q[2][100007],head[2],tail[2];

int main()

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

scanf("%d",&a[i]);

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

f[i]=1;head[0]=1;head[1]=1;tail[0]=0;tail[1]=0;

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

else

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

maxx=max(f[i],maxx);

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

f[i]=1;head[0]=1;head[1]=1;tail[0]=0;tail[1]=0;

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

else

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

maxx=max(f[i],maxx);

cout<

洛谷 P1970 花匠

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

洛谷 P1970 花匠 DP

題目 普通的dp,f i 0 1 表示 i 處處於較小或較大的長度 注意 1.樹狀陣列向後 query 時不能有0,所以讀入的 h i 都 1 2.可能有相同的高度!所以 query 時注意 1,1。如下 include include include include using namespace...

洛谷 P1970 花匠 線性dp

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