实验四动态规划算法一、实验目的与要求1、熟悉最长公共子序列问题的算法;2、初步掌握动态规划算法;二、实验题若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。改进LCS函数,不使用数组b而仅借助数组c本身在O(m+n)时间内构造最长公共子序列。三.实验结果四.运行结果分析运行结果正确,且运行速度很快,算法很简洁,但是理解上还是有些困难。五.程序代码#includeiostreamusingnamespacestd;intc[1024][1024],b[1024][1024];voidLCSLength(char*x,char*y,intm,intn){inti,j;for(i=1;i=m;i++)c[i][0]=0;for(i=1;i=n;i++)c[0][i]=0;for(i=1;i=m;i++)for(j=1;j=n;j++){if(x[i]==y[j]){c[i][j]=c[i-1][j-1]+1;b[i][j]=1;}elseif(c[i-1][j]=c[i][j-1]){c[i][j]=c[i-1][j];b[i][j]=2;}else{c[i][j]=c[i][j-1];b[i][j]=3;}}}voidLCS(inti,intj,char*x){if(i==0||j==0)return;if(b[i][j]==1){LCS(i-1,j-1,x);printf(%c,x[i]);}elseif(b[i][j]==2)LCS(i-1,j,x);elseLCS(i,j-1,x);}voidmain(){intm,n;charx[100],y[100];cout请输入第一个字符串的长度:endl;cinm;cout请输入第一个字符串:endl;for(inti=1;i=m;i++)cinx[i];cout请输入第二个字符串的长度:endl;cinn;cout请输入第二个字符串:endl;for(intj=1;j=n;j++)ciny[j];LCSLength(x,y,m,n);LCS(m,n,x);coutendl;}知识总结学生总结请将问题答案写在下面空白处完成上机训练模块花费的时间3小时本次实验对你而言的难点理解算法本次实验的收获对动态规划的初步了解希望老师强化讲解的知识要点算法希望老师帮助回答的问题本次实验自评分数(五分制)4.5教师评价请将评语、分数等写在下面空白处问题答疑实验评语实验得分