動態規劃例子

2021-09-25 01:36:49 字數 2115 閱讀 7426

演算法描述:

已知多段圖的鄰接表,利用從後往前遞推的方法,先從最後一層往前保留當前的最短路徑長度,由子結構的最優解得到原問題的最優解。

遞推公式是:cost(i,j)=min

這裡為了節約空間,用一維陣列cost來儲存節點j到t的最短路徑長度。

將所有節點按0-n-1進行編號,源點s為0,匯點t為n-1;向前遞推由結點編號由大到小順序進行,先計算cost[n-1],最後得到cost[0]。cost[0]就是我們要的最短路徑長度。

源程式:

#include #define infty 0x7fffffff

using namespace std;

struct enode;

enode **a;

class graph

//多段圖的向前遞推演算法

int fm(int k,int p)

}cost[j]=min;

d[j]=q;

}p[0]=0;

p[k-1]=n-1;

c=cost[0];

for(j=1;j<=k-2;j++)

p[j]=d[p[j-1]];

return c;

} }; int main()

graph g(n,e);

c=g.fm(0,p);

cout演算法描述:

m陣列:計算矩陣連乘a(i,j)所需的最少數乘次數;

當i=j時,無需計算,m(i,j)=0;

當ipk+1pj+1}

最後要求的最優解的值就是m(0,n-1)

源程式:

#include using namespace std;

int p[20];

class matrixchain

//用一般動態規劃求最優解

int mchain()

matrixchain m(n);

x=m.mchain();

cout演算法描述:

兩個序列x,y;此問題具有最優子結構特性。

當xm=yn時,先求出xm-1和yn-1的最長公共子串行,並在尾部加上xm。

當xm!=yn時,必須求解xm-1和yn以及xm和yn-1的最長公共子串行。

c(i,j):儲存xi和yj的最長公共子串行的長度。

能得到以下遞推關係:

c(i,j)=0 i=0,j=0;

c(i,j)=c(i-1,j-1)+1 xi=yi

c(i,j)=max xi!=yi;

源程式:

#include #include using namespace std;

char x[100],y[100];//x,y字串

class lcs

//動態規劃求最長公共子串行

int lcslength()

else if(c[i-1][j]>=c[i][j-1])

else

}} return c[m][n];

}};int main()。

源程式:

#include using namespace std;

//比較兩者中的較大值

int max(int a,int b)3

int main()

} cout演算法描述:

用動態規劃自底向上的求解問題。這裡我用用另乙個陣列來儲存最終結果值。先初始化陣列。m(i,i)=0,m(i,i+1)=r(i,i+1)。我輸入的陣列下標是從1開始的。迴圈向上求解,類似最優二叉搜尋樹演算法。m(i,j)=min。根據狀態方程判斷是否滿足條件。

源程式:

#include using namespace std;

//查詢分開的節點

int find(int i,int j,int r[100][100],int m[100][100]) }

// 把r陣列存入m陣列

for(i=1;i<=n;i++)

int mm;

// 動態規劃求解最少費用

動態規劃例子

對於由從1到n 1 n 39 這n個連續的整數組成的集合來說,我們有時可以將集合分成兩個部分和相同的子集合。例如,n 3時,可以將集合 分為和。此時稱有一種方式 即與順序無關 n 7時,共有四種方式可以將集合 分為兩個部分和相同的子集合 和 和 和 和 輸入 程式從標準輸入讀入資料,只有一組測試用例...

動態規劃經典例子

金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要度,分為5...

動態規劃經典例子

求第一層到最後一層的路徑,將該路徑上的所有數字相加後得到的和最大是多少。include using namespace std const int maxn 1000 int f maxn maxn dp maxn maxn int main for int i 1 i n i for int i ...