最大子段和的两种算法(java)

问题描述  给定序列a [1],a [2],a [3] ...... a [n],您的工作是计算子序列的最大和。例如,给定(6,-1,5,4,-7),此序列中的最大和为6 +(-1)+ 5 + 4 = 14。 杭电1003道题实质就是求出最大子段和问题,在该篇文章中将给出求最大子段和的两种算法,分别是枚举法,动态规划算法.一、枚举法枚举是算法设计的最基本的方法,其基本思想是逐一列举问题所有情况,并...
摘要由CSDN通过智能技术生成

问题描述

  给定序列a [1],a [2],a [3] ...... a [n],您的工作是计算子序列的最大和。例如,给定(6,-1,5,4,-7),此序列中的最大和为6 +(-1)+ 5 + 4 = 14。

 杭电1003道题实质就是求出最大子段和问题,在该篇文章中将给出求最大子段和的两种算法,分别是枚举法,动态规划算法.

一、枚举法

枚举是算法设计的最基本的方法,其基本思想是逐一列举问题所有情况,并根据问题的条件来检验哪些是问题的解。

1.   最大字段和的问题要求主要是求出一个字段,且该字段的和是最大的,而字段的主要元素就是首元素及尾元素.一一列举各种收尾元素可能组成的字段的情况,然后进行判断取出最大的字段和,即为最大字段和.

 首先我们用双层for循环依次列举各种字段可能出现的情况.

1. public int maxsum(int a[ ], int n)

2. {   

3.      int sum=0;                                           //sum为我们要求解的最终的最大子段和

4.      int thissum;                                          //thissum为以a[i]为首元素,以a[j]为尾元素的子段的和

5.      int besti,bestj;//分别为最大子段的首元素及尾元素的位置

6.      int i,j,k;

7.      for(i=1;i<=n;i++)

8.           for(j=i;j<=n;j++)    

9.                for(k=i;k<=j;k++)          

10.    

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值