線性DP基礎 acwing 動態規劃

2022-08-23 21:39:11 字數 3367 閱讀 7759

注意點:1、其實就是講所有走每一步的時候求大致值就好,然後這個值又會對下面進行影響,就像自己思考問題一樣

2、然後就是需要注意一下邊界問題,因為我們這邊求最大值,所以需要對邊界進行初始化

最長上公升子串行理解:1、有一說一,樣板題,很快就容易,就是當前這個值可以由前面**轉過來然後max最大長度就行,++就好

最長上公升子串行二思考:1、資料量增大的下我們是無法兩重迴圈的,所以得優化,

2、不難發現沒有優化的時候我們是需要列舉出我們是從**轉過來,然後繼續求max

3、如果我們要是能夠知道_i_前面的數字的最小值的話,豈不是直接查詢當前這個值就好了,不需再進行列舉了

4、所以,這裡f陣列的含義發生了改變,存的是前面i個數最長上公升子串行結尾的最小值

#include #include #include #include #include #include #include #include #include #include #include #include #include #define pub(n) push_back(n)

#define pob(n) pop_back(n)

#define sf(n) scanf("%d",&n)

#define pf(n) printf("%d\n",n)

#define slf(n) scanf("lld",&n)

#define plf(n) printf("lld\n",&n)

#define rep(i,a,b) for(int i = a; i <= b ; i ++ )

#define pre(i,a,b) for(int i = a ; i >= b ; i --)

#define ll long long

#define pii pair#define inf 0x3f3f3f3f3f3f3fll

#define ull unsigned long long

#define ios ios::sync_with_stdio(false),cin.tie(0)

using namespace std;

const int n = 2e6+10,mod=1e9+7;

int n;

int a[n];

int f[n];

int main()

len=max(len,r+1);

f[r+1]=a[i];

}pf(len);

return 0;

}

之後就是還有乙個最長公共子串行,感覺trie演算法更好一點,就不寫了

DP基礎(線性DP)總結

前言 雖然確實有點基礎.但凡事得腳踏實地地做,基礎不牢,地動山搖,嗯!dp方程 dp i max 複雜度 o n 2 法一 資料結構無腦暴力優化 以a i 為陣列下標,從1到a i 訪問最大值,再加一,進行更新 法二 設h k 表示dp值為k的最長上公升子串行的最小值 有點貪心在裡面 顯然h k h...

AcWing 274 移動服務 線性DP

乙個公司有三個移動服務員,最初分別在位置1,2,3處。如果某個位置 用乙個整數表示 有乙個請求,那麼公司必須指派某名員工趕到那個地方去。某一時刻只有乙個員工能移動,且不允許在同樣的位置出現兩個員工。從 p 到 q 移動乙個員工,需要花費 c p,q 這個函式不一定對稱,但保證 c p,p 0。給出n...

acwing 274 移動服務(線性dp)

乙個公司有三個移動服務員,最初分別在位置1,2,3處。如果某個位置 用乙個整數表示 有乙個請求,那麼公司必須指派某名員工趕到那個地方去。某一時刻只有乙個員工能移動,且不允許在同樣的位置出現兩個員工。從 p 到 q 移動乙個員工,需要花費 c p,q 這個函式不一定對稱,但保證 c p,p 0。給出n...