斜率優化DP

2021-10-25 09:42:13 字數 577 閱讀 4980

/*

斜率優化主要解決的是轉移方程中存在乙個同時與i和j有關的部分時的優化問題

dp[i] = min(dp[j]+a[i]*b[j]) 0#

include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e5+5;

ll a[maxn]

,b[maxn]

,dp[maxn]

;int q[maxn]

;int head =

0,tail =0;

doublea(

int i,

int j)

//由於佇列內維護的是下標,寫斜率時容易出錯,所以最後封裝為函式

doubleb(

int i,

int j)

intmain()

cout << dp[n]

<<

'\n'

;return0;

}

斜率優化 DP

我們知道,有些dp方程可以轉化成dp i f j x i 的形式,其中f j 中儲存了只與j相關的量。這樣的dp方程我們可以用單調佇列進行優化,從而使得o n 2 的複雜度降到o n 可是並不是所有的方程都可以轉化成上面的形式,舉個例子 dp i dp j x i x j x i x j 如果把右邊...

dp斜率優化

我們知道,有些dp方程可以轉化成dp i f j x i 的形式,其中f j 中儲存了只與j相關的量。這樣的dp方程我們可以用單調佇列進行優化,從而使得o n 2 的複雜度降到o n 可是並不是所有的方程都可以轉化成上面的形式,舉個例子 dp i dp j x i x j x i x j 如果把右邊...

dp斜率優化

前置知識 凸包 斜率優化很玄學,憑空講怎麼也講不好,所以放例題。apio2014 序列分割 給你乙個長度為 n 的序列 a 1,a 2,a n 你可以切 k 刀,每一刀可以把某一段序列切成兩段,然後獲得兩段和成績的收益。最後求最大收益和得到最大收益的切割方案。資料範圍 2 le n le 10000...