區間DP 基本題集

2022-06-01 01:36:11 字數 2586 閱讀 7958

51 nod 1021 石子歸併

模板題,敲就完事了,注意一下這種狀態轉移方程有個四邊形的優化(時間)

#include #include 

#include

using

namespace

std;

intn;

const

int maxn=1e3+5

;int

f[maxn][maxn], s[maxn][maxn], a[maxn], sum[maxn];

void

solve_sim()

}void

solve_opt()

for(int len=1; len)

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

}f[i][j]+=sum[j]-sum[i-1

]; }

}int

main()

solve_sim();

solve_opt();

cout

<1][n]<

return0;

}

view code

poj  3186 喂牛

題意:給你n個數字.....每次你可以取出最左端的數字或者取出最右端的數字,一共取n次取完。假設你第i次取的數字是x,你可以獲得i*x的價值。求總價值之和最大。

題解:區間dp問題,子問題:在dp[i][j]這段區間所獲得的最大價值; 

劃分:取左邊或者取右邊,這個是從底往上推的,初始化要注意,

方程:f[i][j]=max(f[i+1][j]+(n-len)*a[i], f[i][j-1]+(n-len)*a[j])

#include #include 

#include

#include

using

namespace

std;

const

int inf=0x3f3f3f3f

;const

int maxn=2e3+5

;int

f[maxn][maxn], a[maxn];

intmain()

for(int len=1; len)

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

cout

<1][n]<

return0;

}

view code

poj  2955 括號匹配

題意:給一串字元,求可以匹配的括號個數,有(), ,這2種括號

題解:區間dp問題,子問題:在區間i,j上的最大可匹配的括號數目; 

劃分:首尾匹配, 首尾不匹配,當首尾不匹配的時候必然可以由2段區間合併來(想一下),列舉所有的子區間組合(分割點); 

#include #include 

#include

using

namespace

std;

const

int maxn=105

;char

s[maxn];

intf[maxn][maxn];

intmain()

printf(

"%d\n

", f[1

][n]);

}return0;

}

view code

poj  3280 求變成回文串的代價

題意:給定乙個字串s,字串s的長度為m,字串s所含有的字元的種類的數量為n(最多26種            小寫字母),然後給定這n種字元add與delete的代價,求將s變為回文串的最小代價和。

題解:區間dp,子問題:當i,j的區間是回文串的時候所要付出的代價; 

劃分:首尾相等,直接轉, 首尾不等,長區間是由比它短一的區間延展來的,從左邊還是右邊

注意:這個初始化,我是真的有點問題,找for迴圈下的狀態轉移的臨界條件,如果不行的話,在for迴圈下初始化; 

這個給出2個cost,刪除和新增其實只要選其中較小的乙個即可;

總結:此題在寫的時候,思路就錯了,這個區間dp問題,它的問題不是由2段短的區間和並來的, 而是由短區間往2邊擴充套件來的,直到擴充套件到1-n;

#include #include 

#include

#include

using

namespace

std;

const

int maxm=2e3+5

;const

int inf=0x3f3f3f3f

;int cost[30

], f[maxm][maxm];

char

s[maxm];

intmain()

/*memset(f, 0x3f, sizeof(f));

for(int i=0; i<=n; i++) f[i][i]=0; ///這個初始化是不對的,找了我好久

*/for(int len=1; len)

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

}cout

<1][n]<

return0;

}

view code

RSA基本題型

已知 簡單公鑰 簡單密文 目標 得到明文 這裡的簡單沒有明確具體的含義,之後待我更深入後,再會對此進行解釋 normal rsa flag.enc和pubkey.pem兩個檔案 flag.enc是乙個密文檔案,pubkey.pem是公鑰檔案 先處理flag.enc密文檔案,用notepad 開啟後發...

BUAA單詞查詢(查詢 基本題)

問題描述 查詢方式說明 查詢方式以1 4數字表示,每個數字含義如下 1 在單詞表中以順序查詢方式查詢,因為單詞表已排好序,遇到相同的或第乙個比待查詢的單詞大的單詞,就要終止查詢 2 在單詞表中以折半查詢方式查詢 3 在單詞表中通過索引表來獲取單詞查詢範圍,並在該查詢範圍中以折半方式查詢。索引表構建方...

線性dp 區間dp

1 尼克的任務 額一道挺水的題,愣是做了幾個小時 動態規劃大致的思路還是找乙個轉移 換個詞就是影響 我們可以明顯看出本題的規則 空暇時,一遇到任務必須挑乙個接 求1 n時間內最大空暇時間 所以將任務排序是必要的,兩個關鍵字 再來想象一下當我做到第i 個任務時,我在 st i st i t i 1 時...