最近想学DP,锻炼思维,记录一下自己踩到的坑,来写一波详细的结题报告,持续更新。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003

Problem Description

Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.

Input

The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).

Output

For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.

Sample Input

2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5

Sample Output

Case 1: 14 1 4 Case 2: 7 1 6

Author

Ignatius.L

Recommend

We have carefully selected several similar problems for you:  1069 2084 1058 1421 1024

这一个题是一个基本题型,先分析数据这点很重要,刚刚踩坑,这里每个ai大于-1000,小于1000,那么min为-1e3*1e5,也就是说求和后最小值最大值为1e8量级,那么比较时最大最小值一定设置比这个量级大或在这个量级最大,而我没考虑到如果全为负数时的情况。

开始说题目,这个题目找最大子串,对于任意一个元素,它有两种可能性,做上个子串的最后一个字符,作以自己开头的子串的第一个字符,我们这里不考虑当前字符后续字符,因为DP子问题无后效性,那么两种状态到了,我们要找出两种状态分支的条件,如果一个元素跟着前面的大哥混没前途,那就不跟他混了,自立山头,不前面序列的和都小于0,不如自己做开头。即可写出状态转移方程。0)\\ a[i]&if(dp[i-1],这里问什么没写等于0呢,因为题目的要求是找最靠前的左端点,所以这等于号要放到上面,但是我们怎么存储端点呢?一样的状态转移,我跟前面的老大哥们混,我的头头肯定是前面的老大哥,所以那我的老大哥也是这个子序列的第一个,如果这个小团伙没落了,我自立山头,那么后来的人的大哥肯定会是我,所以就有了状态转移方程,再开一维,也可以再开一个数组,我不太建议跑好几遍循环的方法,能简化就简化。

if(dp[i-1][1]<0||i==1) //i==1细节操作,自己想一下
{
dp[i][0]=i;
dp[i][1]=a[i];
}
else
{
dp[i][0]=dp[i-1][0];
dp[i][1]=dp[i-1][1]+a[i];
}

应该没什么要注意了,还有就是 初始化,这是多组输入。

杭电60题--part 1 HDU1003 Max Sum(DP 动态规划)的更多相关文章

  1. 高手看了,感觉惨不忍睹——关于“【ACM】杭电ACM题一直WA求高手看看代码”

    按 被中科大软件学院二年级研究生 HCOONa 骂为“误人子弟”之后(见:<中科大的那位,敢更不要脸点么?> ),继续“误人子弟”. 问题: 题目:(感谢 王爱学志 网友对题目给出的翻译) ...

  2. Help Johnny-(类似杭电acm3568题)

    Help Johnny(类似杭电3568题) Description Poor Johnny is so busy this term. His tutor threw lots of hard pr ...

  3. 杭电oj2093题,Java版

    杭电2093题,Java版 虽然不难但很麻烦. import java.util.ArrayList; import java.util.Collections; import java.util.L ...

  4. 解题报告:hdu1003 Max Sum - 最大连续区间和 - 计算开头和结尾

    2017-09-06 21:32:22 writer:pprp 可以作为一个模板 /* @theme: hdu1003 Max Sum @writer:pprp @end:21:26 @declare ...

  5. HDOJ(HDU).1003 Max Sum (DP)

    HDOJ(HDU).1003 Max Sum (DP) 点我挑战题目 算法学习-–动态规划初探 题意分析 给出一段数字序列,求出最大连续子段和.典型的动态规划问题. 用数组a表示存储的数字序列,sum ...

  6. acm入门 杭电1001题 有关溢出的考虑

    最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...

  7. 杭电ACM题单

    杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最 ...

  8. ACM学习历程—HDU1003 Max Sum(dp && 最大子序列和)

    Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub ...

  9. HDU1003 Max Sum(求最大字段和)

    事实上这连续发表的三篇是一模一样的思路,我就厚颜无耻的再发一篇吧! 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 -------------- ...

随机推荐

  1. java web数据库的增删改查详细

    本次课上实验是完成数据库的增删改查. 包括增加用户信息.删除用户信息.多条件查找用户信息.修改用户信息(主要是复选框单选框等的相关操作.) 下面下看一下各个界面的样子. 总页面:显示全部页面:增加页面 ...

  2. .NET MVC中登录过滤器拦截的两种方法

    今天给大家介绍两种ASP中过滤器拦截的两种方法. 一种是EF 的HtppModule,另一种则是灵活很多针对MVC的特性类 Attribute 具体什么是特性类可以参考着篇文章:https://www ...

  3. C语言 文件操作(五)

    (1)size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); 其中,ptr:指向保存结果的指针:size:每个数据 ...

  4. MySQL学习之路6-数据表连接方式

    内连接 关键字: inner join  on 语句:select * from <a_table> inner join <b_table> on a.id = b.id ; ...

  5. PHP远程代码执行漏洞复现(CVE-2019-11043)

    漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码. 向Nginx + PHP-FPM的服务 ...

  6. MVC学习的心路历程

    2020/4/17 之前接触过三层架构,但是没有接触过mvc,所以有点蒙,所以现在在一步步构建思路. 1.了解MVC的发展,做一个简单的项目.

  7. 原创hadoop2.6.4 namenode HA+Federation集群高可用部署

    今天下午刚刚搭建了一个高可用hadoop集群,整理如下,希望大家能够喜欢.   namenode HA:得有两个节点,构成一个namenode HA集群 namenode Federation:可以有 ...

  8. vue项目中使用bpmn-节点篇

    前情提要 根据之前的操作,我们可以创建.导入.导出流程图,并对其进预览.通过此篇可以学到: 为节点添加点击.鼠标悬浮等事件 获取流程图内所有指定类型的节点 通过外部更新节点名字 获取节点实例的两种方法 ...

  9. Android内存优化—dumpsys meminfo详解

    原创置顶 不死鸟JGC 最后发布于2018-12-24 14:19:28 阅读数 3960 收藏展开dumpsys 介绍Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息 命令格式: ...

  10. 用多线程,实现并发,TCP

    首先,开启新的线程,是不会新开辟内存空间的,即,子线程和主线程 都在同一个进程里,也就是主进程里,用os.pid(),os.ppid() 服务器: 方式一:Thread实例化 def task(con ...