原題
一共兩種情況,分別畫圖模擬一下就可以很快想出思路,線性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 設當一部分花被移走後,剩下的花的高度依...