洛谷 P2300 合併神犇

2022-02-27 13:04:34 字數 594 閱讀 5680

洛谷

聽說這題可以\(n^2\)水過去,不過這裡介紹一種\(o(n)\)的做法。

\(f[i]\)為第\(1~i\)位合併的次數。

\(pre[i]\)為第\(1~i\)位最末尾的數。

\(j\)為滿足\(sum[i]−sum[j]>=pre[j]\)的最大數。

所以很好推出:

\(f[i]=f[j]+i−j−1~~~~~pre[i]=sum[i]−sum[j]\)

顯然\(pre[i]\)越小越好,這樣找到乙個就可以退出。

所以可以直接用單調佇列優化。

時間複雜度\(o(n)\)。

**,注意開\(\texttt\):

#include using namespace std;

typedef int _int;

#define int long long

const int n=200010;

int head,tail=1;

int n,f[n],pre[n],sum[n],q[n];

_int main()

cout

}

洛谷P2300 合併神犇

傳送門啦 分析 剛開始讀完題後感覺很懵,怎麼算都不是3,結果發現題目理解錯了。題目要求的是求乙個不降的序列,不是遞減的 發現自己好傻 看明白題就好做了吧。經典的區間dp題,合併果子大家應該都做過,那個題求乙個代價,這個題換成合併次數了,也差不多。本題要使一段序列合併成不下降序列,因為只能合併相鄰的兩...

P2300 合併神犇 DP

loidc來到了noi的賽場上,他在那裡看到了好多神犇。神犇們現在正排成一排在刷題。每個神犇都有乙個能力值p i loidc認為坐在附近的金牌爺能力參差不齊非常難受。於是loidc便想方設法對神犇們進行人道主義合併。loidc想把神犇的能力值排列成從左到右單調不減。他每次可以選擇乙個神犇,把他合併到...

洛谷2300 合併神犇

題目傳送門 一句話題意 給你乙個數列,每次可以把相鄰兩個數合併,求把這個數列變成不下降序列最少需要的操作次數。solution 因為洛谷資料比較水,所以這個題目有兩種做法 1.o n 2 直接dp,f i 表示前 i 個數最少合併的次數。g i 表示前 i 個數在滿足合併了f i 次的條件下最後一組...