ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:181.67KB ,
资源ID:19559094      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19559094.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(动态规划算法实验报告docWord文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

动态规划算法实验报告docWord文档格式.docx

1、(A) else( Traceback(i,sij,s); Traceback(sij+1,j,s);int main() int w;矩阵个数: cinw; int pw,sww;输入矩阵A1维数:p0p1; for(int i=2 ; ipi; if(pi-1 != m)endl#define N 100/str1存储字符串x,str2存储字符串ychar str1N,str2N;/lcs存储最长公共子序列char lcsN;/cij存储str11.i与str21.j的最长公共子序列的长度int cNN;/flagij=0为str1i=str2j/flagij=1为ci-1j=sij-1/

2、flagij=-1为ci-1j=cij-1) cij = ci-1j; flagij = 1; cij = cij-1; flagij = -1; return cmn;/求出最长公共子序列char* getLCS(char *x, char *y,int len,char *lcs) int i = strlen(x); int j = strlen(y); while(i&j) if(flagij=0) lcs-len = xi-1; i-; j-; else if(flagij=1) return lcs; int i;请输入字符串x:str1;请输入字符串y:str2; int lcs

3、Len = LCSLength(str1,str2);最长公共子序列长度:lcsLen char *p = getLCS(str1,str2,lcsLen,lcs);最长公共子序列为:lcsLen;lcsi0?aleft:0; int center = (left+right)/2; /最大子段和在左边 int leftsum=MaxSubSum(a,left,center); /最大子段和在右边 int rightsum=MaxSubSum(a,center+1,right); /最大子段和在中间 int s1=0; int lefts=0; for(int i=center;i=left;

4、i-) lefts+=ai; if(leftss1) s1=lefts; int s2=0; int rights=0; for(int i=center+1;=right; rights+=ai; if(rightss2) s2=rights; sum=s1+s2;/前后子段和相加 /判断最大子段和 if(sumleftsum)sum=leftsum;rightsum) sum=rightsum; return sum;int MaxSum(int *a,int n) return MaxSubSum(a,1,n-1); int a8=2,-3,-5,4,1,7,1,-5;最大子段和为:Ma

5、xSum(a,8);/动态规划法 int sum=0,b=0; for(int i=1;n;i+)/此处不能=n, if(b0) b+=ai; else b=ai;sum) sum=b;4、凸多边形最优三角剖分cmath#define N 50struct point int x; int y;int distance(point X, point Y)/两点距离 int dis = (Y.x-X.x)*(Y.x-X.x) + (Y.y-X.y)*(Y.y-X.y); return (int)sqrt(dis);int w(point a, point b, point c)/权值 retur

6、n distance(a,b) + distance(b,c) + distance(a,c);bool JudgeInput()/判断是否能构成凸多边形 point *v; /记录凸多边形各顶点坐标 int *total; /记录坐标在直线方程中的值 int m,a,b,c;请输入凸多边形顶点个数:m; int M = m-1; for(int i=0 ;m ;输入顶点v的坐标:vi.xvi.y; /根据顶点坐标判断是否能构成一个凸多边形 for(int j=0 ; j j+) int p = 0; int q = 0; if(m-1 = j) a = vm-1.y - v0.y; b =

7、vm-1.x - v0.y; c = b * vm-1.y - a * vm-1.x; a = vj.y - vj+1.y; b = vj.x - vj+1.x; c = b * vj.y - a * vj.x; for(int k=0 ; k 0) p = p+1; else if(totalk 0 & q0) | (p=0 & q=0)无法构成凸多边形!bool minWeightTriangulation()/计算最优值算法 int M; int *t, *s; for(int i=1 ;=M ; tii = 0; for(int r=2 ; r r+)=M-r+1 ; int j =

8、i+r-1; tij = ti+1j + w(vi-1,vi,vj); sij = i; for(int k=i+1 ;i+r-1 ; int u = tik + tk+1j + w(vi-1,vk,vj); if(u tij) tij = u; sij = k; return true;void Traceback(int i, int j, int *s) return;三角形:vi-1sij int *s; /记录最优三角剖分中所有三角形信息 int *t; /记录最优三角剖分所对应的权函数值 int M=0; t = new int *N; s = new int *N;N ; ti

9、= new intN; si = new intN; v = new pointN; total = new intN; if(JudgeInput() if(minWeightTriangulation() Traceback(1,M,s);最优权值之和为:t1M运行结果:5、流水作业调度class Jobtype public: /* int operator=(Jobtype a)const return(key=a.key); */ int key; int index; bool job;void sort(Jobtype *d,int n) Jobtype temp; bool e

10、xchange; /交换标志 for(i = 0;i = i;j -) if(dj+1.key bi?bi:ai;/ 执行时间 di.job=ai=bi;/ 作业组 di.index=i;/作业序号 sort(d,n); int j=0; int k=n-1;i+)/最优调度 if(di.job) cj+=di.index; ck-=di.index; j=ac0; k=j+bc0; j+=aci; k=jdi.key; cout endl; int k=FlowShop(n,a,b,c);n调度时间:最优调度序列: for (int i = 0; i i+) / 输出最优调度序列 ci 6、

11、0-1背包问题#include const int C=10;/容量const int N=5;/个数int max(const int a,const int b) return ab?a:b;int min(const int a,const int b) return a=w1) m1c=max(m1c,m2c-w1+v1);/找出最优解,0表示不能装,1表示能装void traceback(int *m,int n,int c,int *x,int *w) if(mic=mi+1c) xi=0; xi=1; c-=wi; xn=(mnc=0)?0: int *v=new intN+1;

12、 int *w=new intN+1; int *m=new int* N+1; int *x=new int N+1;N+1; mi=new intC+1;输入重量序列,N个=N;wi;输入价值序列,vi; knapsack(m,N,C,w,v); traceback(m,N,C,x,w);cout最优值:m1Cconst double MAX = numeric_limits:max(); /double的最大值/ai为结点i被访问的概率/bi为“虚结点”i被访问的概率/mij用来存放子树(i,j)的期望代价/wij用来存放子树(i,j)的所有结点(包括虚结点)的a,b概率之和/sij用来

13、跟踪root的void OptimalBinarySearchTree(double *a,double *b,int n) int sNN; double mNN; double wNN; int i,j,l,r;=n+1; mii-1 = bi-1; wii-1 = bi-1; for(l=1; l l+)=n-l+1; j = l+i-1; mij = MAX; wij = wij-1 + aj +bj; for(r=i;=j; double k = mir-1 + wij + mr+1j; if(k0.01)输入的概率和不为1,请重新输入最优二叉查找树的期望搜索代价为: OptimalBinarySear

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1