洛谷
聽說這題可以\(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 次的條件下最後一組...