一、實驗目的: 1.通過動態規劃演算法的示例程式理解動態規劃演算法的基本思想;
2.運用動態規劃演算法解決實際問題加深對動態規劃演算法的理解和運用;
二、實驗環境:vc++6.0
三、實驗內容:1.源**如下:
#include
#include
#include
#include
using namespace std;
#define n 105
int dp[n+1][n+1] ;
char str1[n] , str2[n];
int maxx(int a , int b)
int lcsl(int len1 , int len2)
for( i = 1 ; i<= len1 ; i++)
for( j = 1 ; j <= len2 ; j++)
else
}return dp[len1][len2];
}void lcs(int i,int j)
else if(dp[i-1][j]>dp[i][j-1])
lcs(i-1,j);
else
lcs(i,j-1);
}int main()
matrixchain(p,n,m,s);
traceback(1,n,s);
}return 0;
}void matrixchain(int p[maxnum],int n,int m[maxnum][maxnum],int s[maxnum][maxnum])
for (int r = 2; r <= n; r++)}}
}}void traceback(int i,int j,int s[maxnum][maxnum])
}執行結果如下:
3.動態規劃法求解:
#include
using namespace std;
#define max 50
void main()
cout<
using namespace std;
#define n 20
int m[n][n];
char num[n];
int atoi(char arr,int i,int j)
}int main()
m[i][j]=max;}}
}cout<100+5
#define inf 10000000
int fmax[maxn][maxn],fmin[maxn][maxn],s[maxn],n,max_ans=-inf,min_ans=inf;
inline int maxx(int x,int y)
inline int minn(int x,int y)}}}
void get_ans()
}int main()
for(i=1;i<=2*n-1;++i)
s[i]+=s[i-1];//字首和優化
dp();
get_ans();
printf("%d\n%d\n",min_ans,max_ans);
return 0;}
執行結果如下:
實驗六( 動態規劃演算法)
通過動態規劃演算法的示例程式理解動態規劃演算法的基本思想 運用動態規劃演算法解決實際問題加深對動態規劃演算法的理解和運用 visual studio 2013 寫出主要的內容 最長公共子串行問題 若給定序列x 則另一串行z 是x的子串行是指存在乙個嚴格遞增下標序列使得對於所有j 1,2,k有 zj ...
演算法實驗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...
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...