一道很老的题目了,题解也很多,我比较智障,以前勉强做出来了,有一天看见了,又做不出来了。写一篇题解稍微强化下。

题目大意:

给N个数 1~1000000 ,有正有负,判断里面连续最长的和是多少,并且是从第几个加到第几个数。

如果题目中的N小一点,比如只有1000或者10000的话,很容易就可以用前缀和的暴力平方复杂度过去。然而,如果N比较大的话,像这题。就只能用O(n)的优化的算法。也就是只扫一遍。

首先思考,比如我的数列是 5 6 -1 3 4 这样,要求和最大。那么我们很明显,前两个数字会被算进去,因为都是正数,加上去一定更大。然后遇到了负数-1,这个时候,前面的数字和 sum 到底要不要加上-1,似乎要关系到后面的数字的情况,比较麻烦。实际上细细的思考以后,发现如果遇到了一个数,情况只有两种:

1. 前面的和,加上了当前的数字,会得到比只有当前数字更好的情况。

2. 当前数字不加上前面的sum,sum等于当前数字,结果更加大。

如果碰到了第二种情况,我们要更新记录起点终点,也就是说,前面的和没有我们现在考虑的大。

如果碰到第一种情况,我们只需要加上当前的数字,也就是说结果只能更加好。

主体情况就是:

开始时 :

ans = a[1]; ans_begin = ans_end = temp = 1;

//

接下来:

for(int i = 2 ; i <= n ; i++){

  if(a[i] > sum + a[i]){

     temp = i;

     sum = a[i];

  }else{

    sum += a[i];

  }

  if(sum > ans){

    ans = sum;

    ans_begin = temp;

    ans_end = i;

  }

}

基本思路如上。

转载于:https://www.cnblogs.com/ticsmtc/p/5560927.html

[HDU 1003] Max Sum相关推荐

  1. HDU.1003 Max Sum

    原题 HDU.1003 Max Sum 分类 动态规划 题意 计算从一个序列中最大连续子序列和.对应的起始元素和终止元素的位置. 输入/输出 要求与格式 样例数的确定 最开始一行开始输入样例数 每个样 ...

  2. hdu 1003 Max Sum (DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)   ...

  3. hdu 1003 Max Sum 解题报告

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem Description Given a sequence a[1],a[2],a[3 ...

  4. [hdu 1003] Max Sum

    跟<算法导论(第三版)>上的一样,抄下来的 30 - 60 ms 标准的分治策略 1 #include <stdio.h> 2 3 int A[100000], Lenght; ...

  5. hdu 1003 Max Sum

    DP可以这里给出非DP程序 题目传送门 1 #include<stdio.h> 2 int main() 3 { 4 int t,n,i,max,m,sum,ki,kj,k,a,b; 5 ...

  6. HDU 1003——Max Sum(动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目大意:历遍所有数字,找出最大字段和. 解题思路: t和n:记录循环次数和每一段有多少个数字 ...

  7. 位置子段最大子段和 hdu 1003 max sum ACM的开始

    每日一贴,今天的内容关键字为位置子段 这个标题的印象是较比刻深的,我的第一个动态规划标题,也是ACM的开始.最大字段和是较比经典的动归问题.求一个列序的最大子段和的关键点就在于断判一个元素的归属问题, ...

  8. HDU 1244 Max Sum Plus Plus Plus

    虽然这道题看起来和 HDU 1024  Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些 前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][2 ...

  9. 杭电OJ——ACM 1003.Max Sum

    Max Sum 杭电OJ--ACM 1003.Max Sum链接入口 问题描述 大意:        给定一个序列a[1],a[2],a[3]-a[n],你需要算出其子序列中的最大值.比如说:给你一个 ...

  10. HD 1003 Max Sum (最大字段和问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem Description Given a sequence a[1],a[2],a ...

最新文章

  1. 王飞跃 | 面向未来的AI人才应该具备这3种思维
  2. Forms Authentication timeout and Expiration
  3. Jquery获取外网IP
  4. JMeter场景设置叙述
  5. oracle通过sid远程登录,oracle怎么捕获用户登录信息,如SID,IP地址等
  6. scala的foreach和for
  7. c语言中fr,关于frwite()函数的一个问题,弄了好久就是不行,求解啊!
  8. Struts2中action接受参数方法
  9. 如何在网页中加入百度地图
  10. 特斯拉回应Model 3新车无USB接口:芯片短缺
  11. mysql 主从 索引_Mysql繁忙主从库在线修改表结构与添加索引问题
  12. git ignore 某行
  13. HR常用的人力资源系统软件有哪些?
  14. idea中 Java xml注释缩进问题 解决方案
  15. python实现基于selenium的天猫淘宝秒杀,支持定金商品,自动付款
  16. Python内存映射文件读写
  17. Java使用iTextPDF生成PDF文件
  18. 闲聊linux中的input设备(4) 她一直默默地在背后支持着你
  19. 设计模式(一)设计模式的分类与区别
  20. ISCC2016Basic Writeup

热门文章

  1. php - MySQL创建数据库和数据表
  2. W3C-Web Service
  3. GLSL Core Tutorial – Pipeline (OpenGL 3.2 – OpenGL 4.2)
  4. 基于struts2、spring的应用闲置一段时间后报空指针错(转)
  5. 构建安全的 Web Services
  6. Java基础知识拾遗--IO篇
  7. VirtualBox 虚拟 CentOS 7 磁盘扩容
  8. 详解iMazing保障数据安全的设置
  9. JDK下Bin目录的工具介绍
  10. vue-cli3的安装使用