动态规划算法实验报告_第1页
动态规划算法实验报告_第2页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4/4动态规划算法实验报告动态规划算法实验报告

————————————————————————————————:————————————————————————————————日期:

实验标题

1、矩阵连乘

2、最长公共子序列3、最大子段和

4、凸多边形最优三角剖分

5、流水作业调度

6、0-1背包问题

7、最优二叉搜索树

实验目的掌握动态规划法的基本思想和算法设计的基本步骤。

实验内容与源码1、矩阵连乘

#include

usingnamespacestd;

constintsize=4;

//ra,ca和rb,cb分别表示矩阵A和B的行数和列数

voidmatriMultiply(inta[][4],intb[][4],intc[][4],intra,intca,intrb,intcb)

{

if(ca!=rb)cerr>p[0]>>p[1];

for(inti=2;i<=w;i++)

{

intm=p[i-1];

cout<>p[i-1]>>p[i];

if(p[i-1]!=m)

{

cout

#include

#defineN100

usingnamespacestd;

//str1存储字符串x,str2存储字符串y

charstr1[N],str2[N];

//lcs存储最长公共子序列

charlcs[N];

//c[i][j]存储str1[1...i]与str2[1...j]的最长公共子序列的长度intc[N][N];

//flag[i][j]==0为str1[i]==str2[j]

//flag[i][j]==1为c[i-1][j]>=s[i][j-1]

//flag[i][j]==-1为c[i-1][j]=c[i][j-1])

c[i][j]=c[i-1][j];

flag[i][j]=1;

}

else

{

c[i][j]=c[i][j-1];

flag[i][j]=-1;

}

}

returnc[m][n];

}

//求出最长公共子序列

char*getLCS(char*x,char*y,intlen,char*lcs){

inti=strlen(x);

intj=strlen(y);

while(i

j--;

}

elseif(flag[i][j]==1)

i--;

else

j--;

}

returnlcs;

}

intmain()

{

inti;

cout<<"请输入字符串x:">str1;

cout=left;i--)

{

lefts+=a[i];

if(lefts>s1)s1=lefts;

}

ints2=0;

intrights=0;

for(inti=center+1;is2)s2=rights;

}

sum=s1+s2;//前后子段和相加

//判断最大子段和

if(sum>leftsum)sum=leftsum;

if(sum>rightsum)sum=rightsum;

}

returnsum;

intMaxSum(int*a,intn)

{

returnMaxSubSum(a,1,n-1);

}

intmain()

{

inta[8]={2,-3,-5,4,1,7,1,-5};

coutn;

Jobtype*d=newJobtype[N];

a=newint[N];

b=newint[N];

c=newint[N];

cout>d[i].index>>d[i].key;

cout=w[1])

m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);

}

//找出最优解,0表示不能装,1表示能装

voidtraceback(int**m,intn,intc,int*x,int*w)

{

for(inti=1;i>w[i];

cout

#include::max();//double的最大值

//a[i]为结点i被访问的概率

//b[i]为“虚结点”i被访问的概率

//m[i][j]用来存放子树(i,j)的期望代价

//w[i][j]用来存放子树(i,j)的所有结点(包括虚结点)的a,b概率之和

//s[i][j]用来跟踪root的

voidOptimalBinarySearchTree(double*a,double*b,intn)

{

ints[N][N];

doublem[N][N];

doublew[N][N];

inti,j,l,r;

for(i=1;in;

cout<>a[i];

sum+=a[i];

}

cout>b[i];

sum+=b[i];

}

if(abs(sum-1)>0.01)

cout<<"输入的概率和不为1,请重新输入"<<endl;

}

cout<<"最优二叉查找树的期望搜索代价为:";

Opt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论