博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2593 Max Sequence(两个不相交字段的最大总和与)
阅读量:6083 次
发布时间:2019-06-20

本文共 1457 字,大约阅读时间需要 4 分钟。

转载请注明出处:

viewmode=contents

题目链接:

----------------------------------------------------------------------------------------------------------------------------------------------------------
欢迎光临天资小屋:
 
----------------------------------------------------------------------------------------------------------------------------------------------------------

Description

Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N). 
You should output S. 

Input

The input will consist of several test cases. For each test case, one integer N (2 <= N <= 100000) is given in the first line. Second line contains N integers. The input is terminated by a single line with N = 0.

Output

For each test of the input, print a line containing S.

Sample Input

5-5 9 -5 11 200

Sample Output

40

 思想:
对于数据a[],从左向右依次求解以a[i]结尾的最大子段和b[i],
  然后,从右向左遍历,求a[i]右边(包含a[i])的最大子段和sum,输出sum+b[i-1]的  最大值。

代码例如以下:

#include 
using namespace std;#define INF 0x3fffffff#define M 100000+17int a[M],b[M];int main(){ int n,i; while(cin >> n && n) { int sum = 0, MAX = -INF; for(i = 1; i <= n; i++) { cin >> a[i]; sum+=a[i]; if(sum > MAX) { MAX = sum; } b[i] = MAX; if(sum < 0) { sum = 0; } } MAX = -INF; sum = 0; int ans = MAX, t; for(i = n; i > 1; i--) { sum+=a[i]; if(sum > MAX) { MAX = sum; } t = MAX + b[i-1]; if(t > ans) { ans = t; } if(sum < 0) { sum = 0; } } cout<
<

版权声明:本文博客原创文章。博客,未经同意,不得转载。

你可能感兴趣的文章
使用IKAnalyzer分词计算文章关键字并分享几个分词词典
查看>>
分布式进程管理
查看>>
Python下用List对员工信息表进行模糊匹配
查看>>
Mysql 主从复制
查看>>
【SQL Server备份恢复】数据库还原
查看>>
Angular js http请求发送和jquery的ajax一样的数据设置方式
查看>>
Andrid在一个程序中启动另一个程序
查看>>
mysql++ (Tserver安装问题)
查看>>
李开复给大支招 大学生创业有五忌
查看>>
大学学习有感
查看>>
CSS固定DIV,导航条顶部固定fixed(兼容IE6)
查看>>
docker 容器创建参数错误记录
查看>>
python3 笔记
查看>>
kali linux下的网络配置
查看>>
我的友情链接
查看>>
Windows系统下的TCP参数优化(注册表\TCPIP\Parameters)
查看>>
资源共享开源站
查看>>
Open×××中TAP-win32d的net30问题
查看>>
Linux常用命令总结之(九)tail
查看>>
【Glassfish调查】获取客户端Addr和Host
查看>>