P3648 APIO2014 序列分割

2022-04-02 15:13:19 字數 889 閱讀 6756

\(part1:\)

首先看到題目,嗯~ o( ̄▽ ̄)o很騷

手玩一波樣例之後發現狀態很好想(這裡簡單地任務階段可以被劃分次數(也就是劃分順序)和劃分位置來劃分),初步想法是\(f[i][j]\)表示前\(i\)次最後一次切的是\(j\)位置

隨後意識到沒法通過上一層進行轉移,這裡出現問題也是正常,因為沒有進行更深入地發掘性質

此處無法轉移的原因是切的順序不知道,真讓人頭大

\(part2:\)

觀察到題目中計算分數的方法很騷,和的乘積

這兩種運算都比較特殊,都有交換律

然後發現答案與切的順序無關

\(part1\)中的問題迎刃而解,修正狀態得:\(f[i][j]\)表示前\(i\)給數分成\(j\)段的最大值

\(part3:\)

開始轉移

\(f[i][j]=min\\)

\(s[i]\)時字首和

複雜度:\(o(n^2*k)\)

得分:\(50\)

注意此**中\(i\)和\(j\)的含義和上面反著,抱歉

#include#define int long long int

using namespace std;

inline int read()

while(c>='0'&&c<='9')

return f*s;

}const int n=2020;

int road[n][250],n,k,f[n][250],sum[n],a[n];

signed main()

}} }

cout<=1;--i)

return 0;

}

P3648 APIO2014 序列分割

傳送門 首先容易證明,得分和切的順序沒有關係 所以直接預設先切左邊再切右邊就好了 然後顯然可以 dp 一開始想的是設 f i j 表示切了 i 次,此次把 j 和 j 1 分開,得到的最大價值 那麼顯然列舉上一次切的位置 k 那麼 f i j f i 1 k sum j sum k sum n su...

P3648 APIO2014 序列分割 斜率優化

好的先把自己的式子推了出來 樸素 定義 f i j 表示前 i 個數進行 j 次切割的最大得分,s i 為字首和 那麼轉移方程為 f i j max f i 1 j s j s i s j 優化一下 省掉第一維 f i max mem j s j s i s j f j mem j 相當於 f i ...

Luogu 3648 APIO2014 序列分割

題目鏈結 首先要發現乙個重要的性質 分割的順序是不會影響答案的 證明 首先對於沒有交的兩段區間,顯然先後順序改變不會有影響 而對於在同一段區間上的兩次分割 設有一段序列由長度為 x,y,z 的三段拼接起來 如果先分割 xy 和 z 再分割 x 和 y 答案是 x y z x y 而如果先分割 x 和...