一道動態規劃例題 杭電1024

2022-09-23 17:03:14 字數 769 閱讀 8159

問題描述:

給定乙個長度為n的整數的陣列,現在讓你將整個陣列分成m段,並且這m段互不相交,在所有分段方式中能夠得到的這m段子陣列的最大的和是多少?

解析:本題是一道適合用動態規劃方式解決的問題,首先定義兩個狀態:f[i][j],g[i][j].

f[i][j]是將前i個元素分成j段並且包含第i元素的最大和;

g[i][j]是將前i個元素分成j段並且不一定包含第i元素的最大和;

則狀態轉移方程為:

f[i][j]=max(f[i-1][j]+data[i],g[i-1][j-1]+data[i]),即第i元素data[i]可能和前面的元素一起組成第j段,也可能是自己單獨是第j段;

g[i][j]=max(f[i][j],g[i-1][j]),即g[i][j]為包含第i元素的j段和與不包含第i元素j段和的最大值;

g[n][m]即為最終整個陣列分成m段,並且這m段互不相交,在所有分段方式中能夠得到的這m段子陣列的最大的和;

下面程式中可以將兩個二維陣列f,g壓縮為一維進行計算,程式如下:

#include

using namespace std;

int max_sum(const int *data,int n,int m);

int max(int a,int b);

int main()

} int result=g[m];

delete f;

delete g;

return result;

}int max(int a,int b)

一道簡單的動態規劃

這是一道usaco的題,section 3.4 raucous rockets 如果只有1張唱片,就是乙個揹包問題,現在有m張唱片,怎麼辦呢?dp i j k 表示前i首歌曲在j個cd中最後乙個cd時間為k的最大值 如果這首歌不選,就是dp i 1 j k 如果選,可以在當前時間就選,就是dp i ...

一道有兩個極限資源的動態規劃例題

題目描述 description 某天,妮妮在街上閒逛。他在超市裡看到 廣告 商品大降價。於是他很高興地拿著籃子購物去了。已知商場內有n中商品。每種商品的重量為w千克,為v,價值為t。此種商品有h件。注意 此商場有乙個奇怪的規定。每種物品要麼不買,要麼買1件或h件。妮妮帶了y元。妮妮最多能扛x千克的...

一道動態規劃水題的思考

最近感覺自己太菜了,想做一道水題找找自信,結果越發自卑qwq 洛谷p1002過河卒 這道題目的空間一維優化我居然看了半天才看懂 其實主要是那個作者沒有講清楚,讓我迷糊了半天,下面我來談談我對於這個狀態轉移方程的理解吧.對於沒有更新的狀態,它裡面存的值對應於二維陣列中 原作者的描述確實讓人看著有點迷q...