- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c++动态规划算法
淮海工学院计算机工程学院
实验报告书
课程名: 《算法分析与设计》
题 目: 实验2 动态规划算法
班 级: ***
学 号: ***
姓 名: ***
评语:
成绩: 指导教师:
批阅时间: 年 月 日
《 算法分析与设计》实验报告 - 1 -
2 实验目的和要求
(1)深刻掌握动态规划法的设计思想并能熟练运用; (2)理解这样一个观点:同样的问题可以用不同的方法解决,一个好的算法是反复努
力和重新修正的结果。
(3)分别用蛮力法、分治法和动态规划法设计最大子段和问题的算法;
(4)比较不同算法的时间性能;
(5)给出测试数据,写出程序文档
实验内容
ja给定由n个整数组成的序列(a1, a2, …, an),求该序列形如 的子段和的最大值,当,kk,i所有整数均为负整数时,其最大子段和为0。 实验环境
Turbo C 或VC++
实验学时
2学时,必做实验
数据结构与算法
int MaxSum(int a[ ], int left, int right)
{
sum=0;
if (left= =right) { //如果序列长度为1,直接求解
if (a[left]0) sum=a[left];
else sum=0;
}
else {
center=(left+right)/2; //划分
leftsum=MaxSum(a, left, center);
//对应情况?,递归求解
rightsum=MaxSum(a, center+1, right);
//对应情况?,递归求解
s1=0; lefts=0; //以下对应情况?,先求解s1
for (i=center; i=left; i--)
{
lefts+=a[i];
if (leftss1) s1=lefts;
}
s2=0; rights=0; //再求解s2
for (j=center+1; j=right; j++)
{
rights+=a[j];
《 算法分析与设计》实验报告 - 2 -
if (rightss2) s2=rights;
}
sum=s1+s2; //计算情况?的最大子段和
if (sumleftsum) sum=leftsum;
//合并,在sum、leftsum和rightsum中取较大者
if (sumrightsum) sum=rightsum;
}
return sum;
}
核心源代码
#include stdio.h
int MaxSum(int a[],int left,int right) {
int i,sum=0;
if(left==right)
sum=a[left]0?a[left]:0;
else
{
int center=(left+right)/2;
int leftsum=MaxSum(a,left,center); int rightsum=MaxSum(a,center+1,right); int s1=0,s2=0,lefts=0,rights=0;
for(i=center;i=left;i--)
{
lefts+=a[i];
if(leftss1)
s1=lefts;
}
for(i=center+1;i=right;i++)
{
rights+=a[i];
《 算法分析与设计》实验报告 - 3 -
if(rightss2)
s2=rights;
}
sum=s1+s2;
if(sumleftsum) sum=leftsum; if(sumrightsum) sum=rightsum; }
return sum;
}
void main()
{
int i,s=0;
int a[6];
printf(请输入6个整数:);
for(i=0;i6;i++)
scanf(%d,a[i]);
s=MaxSum(a,1,6);
printf(最大子段和为:%d,s);
}
#include stdio.h
int MaxSum(int n,int a[]) {
int i,sum=0,b=0;
for(i=1;i=n;i++)
{
if(b0)
《 算法分析与设计》实验报告 - 4 -
b+=a[i];
else
b=a[i];
if(bsum)
sum=b;
}
return sum;
}
void main()
{
int i,s=0;
int a[6];
printf(请输入6个整数:);
for(i=0;i6;i++)
scanf(%d,a[i]);
s=
您可能关注的文档
最近下载
- 一种应用于后馈式抛物面反射面天线的双频段馈源.pdf VIP
- 通信核心网试题-IMS-HW-L2-202305.docx
- 新一代信息技术产业——“数字引擎”释放强劲动能.pdf VIP
- 《高等基础工程学》桩基工程专题.ppt
- Unit4ScientistsWhoChangedtheWorld单词讲义高中英语牛津译林版(2020).docx
- 2022年中考语文二轮复习之记叙文阅读.doc
- 医院医共体章程.pdf
- 2024忆“九一八”事件 强全民国防教育ppt课件(2024版).pptx
- 2024年党纪学习教育党员学习心得体会十篇.docx VIP
- 小学语文新部编版一年级上册全册教案((2024秋).doc
文档评论(0)