最大子段和问题(Maximum Interval Sum)
来源:互联网 发布:如何不越狱下载软件 编辑:程序博客网 时间:2024/05/17 22:25
一、问题描述
给定长度为n的整数序列a[1...n](可能有负数),找出其中连续的子段,使它们的和达到最大。例如 [-2,11,-4,13,-5,2] 的最大子段和为20,所在子区间为[2,4].
二、解题思路
可以转化为动态规划问题,记s[i]为 a[0]到a[i]中包含a[i](即以a[i]为结尾)的最大子段和,则s[i]如何用s[i-1]来表示?s[i] = s[i-1] + a[i]; s[i-1]>0 //继续在前一个子段上加上a[i]
s[i] = a[i]; s[i-1]<=0 //不加上前面的子段
也就是说状态转移方程:
s[i] = s[i-1]>0 ? (s[i-1]+a[i]) : a[i];
计算s[i]时只用到s[i-1]和a[i], 所以只需保留s[i-1]的值,然后取s中最大的就是一维序列的最大子段。
三、代码实现
#include <stdio.h>int max_sum(int a[], int n){int max = a[0]; int sum = a[0];for (int i = 1; i < n; i++){if (sum > 0) sum += a[i]; else sum = a[i];if (sum > max) max = sum;}return max;}int main(){int test[] = {-2,11,-4,13,-5,2};printf("%d\n", max_sum(test, 6));return 0;}
- 最大子段和问题(Maximum Interval Sum)
- 最大子段和问题(Maximum Interval Sum)
- Maximum sum 二维最大子段和
- Maximum sum(poj 2479 最大m子段和)
- POJ 2479 Maximum sum (DP&双最大子段和)
- poj 2479 Maximum sum 两段不相交最大子段和
- poj 2479 Maximum sum(dp&最大子段和)
- pat(A) 1007. Maximum Subsequence Sum(和最大子段)
- poj2479 Maximum sum(最大子段和变形)
- poj 2479 Maximum sum (子序列和最大问题)
- 【C/C++】Maximum Subsequence Sum/最大子列和问题
- Max Sum(最大子段和问题)
- POJ 2479 动态规划 最大子序列问题(两段) Maximum sum
- poj 2479 Maximum sum(求最大子段和的延伸)
- Codeforces 75D Big Maximum Sum 最大子段和 dp
- poj 2479 Maximum sum(求最大子段和的延伸)
- POJ 1050 To the Max && POJ 2479Maximum sum(DP最大连续子段和)
- poj 2479 dp Maximum sum求两段连续不重叠子段的最大和
- 13年五月至九月计划
- STM32用IO口控制步进电机的简单程序
- Android Fragment完全解析,关于碎片你所需知道的一切
- 面试100题系列之19二分数组
- ACM需要学习的算法(最好是依次学)
- 最大子段和问题(Maximum Interval Sum)
- U-Boot启动过程完全分析
- exit()和aexit()
- 关于服务器项目日志的一个便捷处理
- CSDN的博客搜索功能太弱,教你怎么搜索自己博客的文章
- windows mysql 自动备份的几种方法
- stm32片上资源分析
- 计算机网络、计算机操作系统、数据结构、C++标准库学习小结
- 深入探讨 Java 类加载器