YBTOJ 劃分數列

2022-06-13 13:54:12 字數 545 閱讀 8027

鏈結給定乙個長度為 \(n\) 的數列 \(a\),要求劃分最少的段數,使得每一段要麼單調不降,要麼單調不公升。

考慮用動態規劃,設 \(f_i\) 表示從一到 \(i\) 最少可以劃分的段數。

則有轉移方程:

\[f_i=\min(f_,f_)+1

\]其中 \(u_i\) 表示以 \(i\) 結尾單調不降的一段的起點,\(d_i\) 則表示以 \(i\) 結尾單調不公升的一段的起點。

這個數列 \(u,d\) 可以用 \(o(n)\) 的時間複雜度預處理出來,那麼總時間複雜度為 \(o(n+n)=o(n)\)。

int main()

memset(f, 127 / 3, sizeof f);

f[1] = f[0] = 0;

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

f[i] = min(f[u[i] - 1] + 1, f[d[i] - 1] + 1);

printf("%d", f[n]);

return 0;

}

動規 二分 劃分數列

2.劃分數列 seq.pas c cpp 題目描述 給你乙個有n個元素的數列,要求把它劃分成k段,使每段元素和的最大值最小 輸入格式 第一行兩個正整數n,k 第二行為此數列ai 輸出格式 一行乙個數,為題目所求答案 樣例輸入 5 22 1 3 4 5 樣例輸出 資料規模 30 資料 n 30,k 1...

劃分數問題

問題描述 有n個無區別的物品,將它們劃分成不超過m組,求出劃分方法數 這是一道經典的不能再經典的題目,當然也有不同的定義方式,下面將從兩種方式來分析這個問題 把n個同樣的蘋果放在m個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示,5,1,1和1,5,1 是同一種分法 放蘋果的問...

整數劃分(數的m劃分)

includeusing namespace std int f int n,int m n代表數字,m代表n的m劃分 int main 方式二 動態規劃 dp i j 表示i的j次劃分的情況種數 狀態轉移方程為dp i j dp i j j dp i 1 j 1 1.dp i 1 j 1 表示劃分...