算法设计与分析--求最大子段和问题(蛮力法 分治法 动态规划法 C++实现

本文介绍了如何求解最大子段和问题,分别通过蛮力法、分治法和动态规划法进行详细阐述,并提供了完整的C++实现代码。适合初学者学习算法设计与分析。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

算法设计与分析--求最大子段和问题

问题描述:

给定由n个整数组成的序列(a1,a2, …,an),求该序列形如

   

 的子段和的最大值,当所有整数均为负整数时,其最大子段和为0。


利用蛮力法求解:

int maxSum(int a[],int n)int maxSum = 0int sum = 0for(int i = 0; i < n; i++) //从第一个数开始算起 {  for(int j = i + 1; j < n; j++)//从i的第二个数开始算起  {   sum = a[i];   a[i]  += a[j];   if(a[i] > sum)   {    sum = a[i];  //每一趟的最大值   }  }  if(sum > maxSum)  {   maxSum = sum;  } } return maxSum;}


利用分治法求解:

int maxSum(int a[],int left, int right)int sum = 0if(left == right) //如果序列长度为1,直接求解 {  if(a[left] > 0) sum = a[left];  else sum = 0; } else  {  int center = (left + right) / 2//划分  int leftsum = maxSum(a,left,center); //对应情况1,递归求解  int rightsum = maxSum(a, center + 1, right);//对应情况2, 递归求解  int s1 &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值