最近想学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呢,因为题目的要求是找最靠前的左端点,所以这等于号要放到上面,但是我们怎么存储端点呢?一样的状态转移,我跟前面的老大哥们混,我的头头肯定是前面的老大哥,所以那我的老大哥也是这个子序列的第一个,如果这个小团伙没落了,我自立山头,那么后来的人的大哥肯定会是我,所以就有了状态转移方程,再开一维,也可以再开一个数组,我不太建议跑好几遍循环的方法,能简化就简化。

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. HDU-1003 Max Sum(动态规划)

    题目回顾(HDU-1003): Max Sum Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is t ...

  2. 杭电60道DP问题总结(一)

    杭电60道DP问题总结: DP是一个很有艺术的思想.看似简单的背后却隐藏着深刻的含义. 题目连接地址:http://acm.hdu.edu.cn/problemclass.php?id=516& ...

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

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

  4. 杭电2317题 Nasty Hacks

    /** 杭电2317题 Nasty Hacks讨厌的黑客题目大意:给你三个数 第一数表示是再不做广告的前提下公司的收入为 r 第二数表示在做广告的前提下公司的收入为 e第三数表示做广告的成本为 c*/ ...

  5. 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂

    文章目录 前言 一.名称定义 1.最大公约数 2.辗转相除法 3.更相减损法 二.ACM杭电入门题 1.解题思路 三.解题参考代码(C语言,C++) 0.最优算法(C++) 1.辗转相除求解(C语言) ...

  6. 上班无聊之际就聊聊杭电ACM1002题吧

    上班无聊之际就聊聊杭电ACM1002题吧 杭电acm不但对提交的输出格式有严格的要求,而且对代码本身也有要求毕竟我们自己写代码的时候的编译器和它内部的不一定一样是不是.所以就导致了一系列的坑爹事件,先 ...

  7. 杭电60道DP问题总结(二)

    接着上一篇文章. 上次一次写的有点长了,保存好半天不成功,这次短一点吧,5道题目. 题目链接地址:http://acm.hdu.edu.cn/problemclass.php?id=516 ProID ...

  8. 杭电acm2151题java的解法,杭电ACM题型分类

    杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...

  9. 杭电oj1620题c语言答案,杭电oj部分水题 c语言源代码.doc

    杭电oj部分水题 c语言源代码 殿剐忱酪短祭幂曝沈脸蛀蓑挞姻扶宠秤蓄幌榆矾巨旷于渍弯史影得熄孟椒菊葫彦籍蛛绊趣庙捣载睹答赊索添垛蝎伙生瞎回悟辅篇狱辗歧病氯急迸怜煽跋屋凡逻甲确烧迟卞姻郸被康少辊蒂刽厂礁 ...

最新文章

  1. 00后的AI开发者进阶之道:从入门到鏖战MIT编程大赛 | 人物志
  2. FPGA笔试题解析(四)
  3. jsonp解决跨域问题
  4. 943602cs 蓝牙驱动 win10_英特尔升级WiFi 和蓝牙驱动,Win10 更新5月版稳了
  5. PolyBase 指南
  6. 实验4 贪心法(作业调度问题)
  7. hadoop-HA集群搭建,启动DataNode,检测启动状态,执行HDFS命令,启动YARN,HDFS权限配置,C++客户端编程,常见错误
  8. Google Guava 库用法整理
  9. 大数据十三五规划将出台 激活相关行业万亿产值
  10. [css] CSS的伪类和伪对象有什么不同?
  11. python基础入门(4)之布尔值
  12. ASP中巧用Response属性
  13. Python-视频爬取示例对小白友好
  14. android 多个c文件编译成一个so,AndroidStudio使用CMakeLists.txt编译多个so库
  15. 2018北理复试机试题
  16. C语言合法常量123L,C语言综合习(最终版).doc
  17. 基于java题库及试卷管理模块的设计与开发(含源文件)
  18. 数仓OLAP(一)--即席查询 Kylin
  19. win10+Ubuntu20.04双系统安装
  20. UE4渲染设置介绍(Rendering Setting)

热门文章

  1. java 查询日期行列转换_java中日期格式的转换和应用
  2. anaconda如何更改环境配置_Anaconda环境配置2020-08-27
  3. Gitlab+Gerrit+Ldap+nginx+mysql 之Gerrit搭建与配置(一)
  4. [系统底层] x86和x64下ssdt的差异
  5. 浅谈 DDoS 攻击与防御
  6. 午夜十分之凌晨三点半
  7. BTrace实现浅析
  8. 解读2014之前端篇:任性的颠覆式改变
  9. 【转】回调函数,函数指针与函数对象
  10. 用位组函数来计算每个月中用户访问网页的天数。