實驗六( 動態規劃演算法)

2021-10-12 03:27:25 字數 2534 閱讀 7621

1.通過動態規劃演算法的示例程式理解動態規劃演算法的基本思想;

2.運用動態規劃演算法解決實際問題加深對動態規劃演算法的理解和運用;

visual studio 2013

(寫出主要的內容)

最長公共子串行問題:若給定序列x=,則另一串行z=,是x的子串行是指存在乙個嚴格遞增下標序列使得對於所有j=1,2,…,k有:zj=xij。例如,序列z=是序列x=的子串行,相應的遞增下標序列為。

給定2個序列x和y,當另一串行z既是x的子串行又是y的子串行時,稱z是序列x和y的公共子串行。

給定2個序列x=和y=,找出x和y的最長公共子串行。

在參考程式的基礎上,編寫主函式,實現最長公共子串行的動態規劃求解。測試資料報括教材155頁演算法設計題中給出的資料,另外再自己設計兩組測試資料。

在科學計算中經常要計算矩陣的乘積。矩陣a和b可乘的條件是矩陣a的列數等於矩陣b的行數。若a是乙個p×q的矩陣,b是乙個q×r的矩陣,則其乘積c=ab是乙個p×r的矩陣。由該公式知計算c=ab總共需要pqr次的數乘。其標準計算公式為:

現在的問題是,給定n個矩陣。其中ai與ai+1是可乘的,i=1,2,…,n-1。要求計算出這n個矩陣的連乘積a1a2…an,最少的乘法次數。

遞迴公式:

請編寫程式實現矩陣連乘問題的動態規劃演算法,自己設計不少於3組的測試資料,要求顯示出最少的乘法次數,以及最優計算次序。

給定由n個整數(可能有負整數)組成的序列(a1,a2,…,an),最大子段和問題要求該序列形如的最大值(1<=i<=j<=n),當序列中所有整數均為負整數時,其最大子段和為0。

1)用分治法求解。(選做)

2)用動態規劃法求解。

問題描述:設x是乙個n位十進位制整數,如果將x劃分為k段,則可得到k個整數,這k個整數的乘積稱為x的乙個k乘積。請設計演算法並程式設計實現,對於給定的x 和k,求出x的最大k乘積。

輸入:x,k,n

輸出:x的最大k乘積。

實驗三 動態規劃演算法

一 實驗目的 通過動態規劃演算法的示例程式理解動態規劃演算法的基本思想 運用動態規劃演算法解決實際問題加深對動態規劃演算法的理解和運用 二 實驗環境 vc 6.0 三 實驗內容 1.源 如下 include include include include using namespace std de...

演算法實驗3《動態規劃演算法實驗》

1.編寫乙個簡單的程式,解決0 1揹包問題。設n 5,c 10,w v include using namespace std void knapsack int v,int w,int c,int n,int m m 1 c m 2 c if c w 1 m 1 c m 1 c m 2 c w 1...

動態規劃演算法

一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...