http://acm.hdu.edu.cn/showproblem.php?pid=1003
给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=1000
求最大连续子段和及其起始位置和终止位置,很基础的动态规划(DP)问题,看完DP第一次做的DP题目
DP真的是一种很优美的算法,或者说思想,但是比较难理解,我对DP的理解还很浅薄
# include <stdio.h>
# define INF 1000000000 int main()
{
int Start, End, Sum, Max, Num, Flag, t, n; scanf("%d",&t);
for(int Count = 0; Count < t; Count++)
{
if(Count) printf("\n"); scanf("%d",&n); //初始化
Start = Flag = 1;//Start/End:已记录的最大连续子段得起/终点; Flag:当前子段起点
End = n;
Sum = 0;//Sum:当前子段和
Max = -INF;//Max:已记录的最大连续子段和 for(int i = 1; i <= n; i++)
{
scanf("%d",&Num);
Sum += Num; //Sum大于Max 更新当前最大连续子段信息
if(Sum >= Max)
{
Max = Sum;
Start = Flag;
End = i;
}
//* Sum小于0 Sum置0 当前子段起点标志为下一个
//因为这一步的存在 每次循环结束 Sum总是>=0
//所以Sum + Num后小于0 说明Num是负数并且其绝对值比Sum大 若把该Num纳入子段 则会导致子段不是最优
if(Sum < 0)
{
Sum = 0;
Flag = i + 1;
}
} printf("Case %d:\n", Count + 1);
printf("%d %d %d\n", Max, Start, End);
} return 0;
}
HDOJ-1003 Max Sum(最大连续子段 动态规划)的更多相关文章
-
HDOJ 1003 Max Sum(线性dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 思路分析:该问题为最大连续子段和问题,使用动态规划求解: 1)最优子结构:假设数组为A[0, 1 ...
-
杭电1003 Max Sum 【连续子序列求最大和】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目意思: 即给出一串数据,求连续的子序列的最大和 解题思路: 因为我们很容易想到用一个max ...
-
[ACM] hdu 1003 Max Sum(最大子段和模型)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
-
Hdoj 1003.Max Sum 题解
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
-
最大子序列和 HDOJ 1003 Max Sum
题目传送门 题意:求MCS(最大连续子序列和)及两个端点分析:第一种办法:dp[i] = max (dp[i-1] + a[i], a[i]) 可以不开数组,用一个sum表示前i个数字的MCS,其实是 ...
-
HDOJ(1003) Max Sum
写的第一个版本,使用穷举(暴力)的方法,时间复杂度是O(N^2),执行时间超过限制,代码如下: #include <stdio.h> #define MAX_LEN 100000UL in ...
-
HDOJ(HDU).1003 Max Sum (DP)
HDOJ(HDU).1003 Max Sum (DP) 点我挑战题目 算法学习-–动态规划初探 题意分析 给出一段数字序列,求出最大连续子段和.典型的动态规划问题. 用数组a表示存储的数字序列,sum ...
-
HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
-
hdu 1003 Max Sum (DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others) ...
-
HDU 1024 Max Sum Plus Plus (动态规划)
HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...
随机推荐
-
About_PHP_文件的上传
在form表单中,我们上传文件用的是:<input type="file" name="fileUpload" />,当然,光是这样是不行的. 我们 ...
-
自动删除Mysql备份(数组+for)
#!/bin/bash #author:V #Dispaly:auto delete mysql backup. BACKDIR=(/home/11/mysqlbackup/ /home/full/) ...
-
springmvc+mybatis+spring 整合 bootstrap
获取[下载地址] [免费支持更新]三大数据库 mysql oracle sqlsever 更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] ...
-
defer和async的区别
先来试个一句话解释仨,当浏览器碰到 script 脚本的时候: <script src="script.js"></script> 没有 defer 或 a ...
-
Java GC专家系列1:理解Java垃圾回收
了解Java的垃圾回收(GC)原理能给我们带来什么好处?对于软件工程师来说,满足技术好奇心可算是一个,但重要的是理解GC能帮忙我们更好的编写Java应用程序. 上面是我个人的主观的看法,但我相信熟练掌 ...
-
CSDN-markdown语法之怎样使用LaTeX语法编写数学公式
文件夹 文件夹 正文 标记公式 行内公式 块级公式 上标和下标 分数表示 各种括号 根号表示 省略号 矢量表示 间隔空间 希腊字母 特殊字符 关系运算符 集合运算符 对数运算符 三角运算符 微积分运算 ...
-
go的变量redeclare的问题,golang的一个小坑
go的变量声明有几种方式: 1 通过关键字 var 进行声明 例如:var i int 然后进行赋值操作 i = 5 2 最简单的,通过符号 := 进行声明和赋值 例如: i:=5 golang会 ...
-
shell中的crontab定时任务
一.crontab简介: crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 ...
-
ID绘图工具的使用5.29
1.按住ALT拖动矩形工具,以中心绘制矩形. 绘制矩形的过程中,按住空格键可以调整矩形的位置. 2选择矩形工具,单击,可以精确输入尺寸. 3“窗口‘”信息“面板调出来.这样在绘制的时候可以边绘制边看 ...
-
完美解决IE9浏览器出现的对象未定义问题
目前Window7的机器上,使用IE9浏览器的用户很多,但是IE9在兼容性上做了较严格的控制,导致很多程序在chrome,firefox,ie6,ie7,ie8上可以正常运行,在ie9上确出现了各种问 ...