區間dp總結

2021-08-28 15:00:33 字數 2969 閱讀 9257

持續更新…

1.p1005 矩陣取數

解題思路:

按行區間dp

void

print

(__int128 x)

**部分
#include

#include

#include

using

namespace std;

__int128 map[85]

[85],f[85]

[85];

__int128 ans=0;

//按行區間dp

__int128 p[85]

;int n,m;

__int128 dfs

(int l,

int r,__int128 a)

void

print

(__int128 x)

intmain

(int argc,

char

** argv)

}for

(int i=

1;i<=n;i++

)print

(ans)

;return0;

}

2.p1880 石子合併

解題思路:

最初拿到題目的時候,以為是用赫夫曼樹的思想合併石子。但是這個合併的順序是一定的,即只能和左邊或者右邊的石子合併,而不是從一堆石子中找出最小的兩堆石子合併。在解題過程中需注意:

#include

#include

#include

#include

#define mx 233233233

using

namespace std;

int a[

220]

,b[220];

//f[i][j]= max(f[i][j],f[i][k]+f[k][j]+d[i][j])

int f[

220]

[220

],f2[

220]

[220];

intd

(int i,

int j)

intdfs

(int l,

int r)

return f[l]

[r];

}int

dfs2

(int i,

int j)

// printf("%d\n",f2[i][j]);

return f2[i]

[j];

}int

main

(int argc,

char

** argv)

for(

int i=

1;i<=

2*n;i++)}

dfs(1,

2*n)

;dfs2(1

,2*n);

for(

int i=

1;i+n<=

2*n;i++

)printf

("%d\n%d\n"

,ans2,ans)

;return0;

}

3.p1063能量項鍊

解題思路:

與p1880 石子合併有異曲同工之妙(因為都是區間dp問題),注意到合併時並非最開始想的從左到右順序合併,在這裡記f[l

][r]

f[l][r]

f[l][r

]為從l

ll到r

rr合併的總能量,那麼有:

f [l

][r]

=max

(f[l

][r]

,f[l

][k]

+f[k

+1][

r]+a

[l]∗

a[k+

1]∗a

[r+1

])

f[l][r]=max(f[l][r],f[l][k]+f[k+1][r]+a[l]*a[k+1]*a[r+1])

f[l][r

]=ma

x(f[

l][r

],f[

l][k

]+f[

k+1]

[r]+

a[l]

∗a[k

+1]∗

a[r+

1])其中a[l

]a[l]

a[l]

為左端點,a[k

+1

]a[k+1]

a[k+1]

為第一部分的右端點,也是第二部分的左端點,a[r

+1

]a[r+1]

a[r+1]

為第二部分的右端點。然後將環化成長度為2n2n

2n的鏈即可。

#include

#include

using

namespace std;

#define ll long long

ll a[

110+

110]

;ll f2[

220]

[220];

intdfs

(int l,

int r)

return f2[l]

[r];

}int

main

(int argc,

char

** argv)

dfs(1,

2*n-1)

;//只能到2*n-1,為了保證遞推公式裡面的a[r+1]不超過a[2*n]

ll ans=-1

;for

(int i=

1;i<=n;i++

)printf

("%lld"

,ans)

;return0;

}

區間DP總結

做了幾題區間動態規劃的題目,覺得區間動態規劃的題目是有點難的。區間dp大概是這一類的動態規劃,在乙個線性的資料上對區間進行狀態轉移,dp i j 表示i到j的區間。dp i j 可以由子區間的狀態轉移而來,關鍵是dp i j 表示的是什麼,然後去找dp i j 和子區間的關係。要知道,在求dp i ...

區間DP總結(一)

noip2000提高 乘積最大 需要用到高精度,目前還不會。noip2006提高組 能量項鍊 noi1995 石子合併 經典區間dp poj1141 brackets sequence 括號匹配 值得細看的部落格 動態規劃之區間dp專題 1 石子合併題目 區間dp模板。include define ...

區間DP總結(二)

poj 1141 brackets sequence 括號匹配並輸出方案 洛谷2858 奶牛零食 區間長度逐漸縮小 洛谷1622 釋放囚犯 將問題向區間dp轉化的思想 參考部落格 劍鋒oi部落格動態規劃之區間dp專題 區間dp常用模板 初始化dp陣列及len為1的情況 for int len 2 l...