最大子序列和——HDU-1003 Max Sum
题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置
解题思路:经典DP,可以定义dp[i]表示以a[i]为结尾的子序列的和的最大值,因而最大连续子序列及为dp数组中的最大值。
状态转移方程:dp[1] = a[1]; //以a[1]为结尾的子序列只有a[1];
i >= 2时, dp[i] = max( dp[i-1]+a[i], a[i] );
dp[i-1]+a[i] > a[i]时,即dp[i-1](以a[i-1]为结尾的子序列的和的最大值)的值为正,那么dp[i-1]则对dp[i]有贡献,
dp[i-1]+a[i] < a[i]时,即dp[i-1] < 0,那么抛弃它,dp[i] = a[i]
例子:序列 6 -7 5 2 -3, 则dp[i]分别为 6 -1 5 7 4,注意dp[2]直接用a[2]表示,因为dp[1] = -1 < 0; 最后最大子序列和即为dp数组中的最大值 5;
至于位置的记录,则再每次获取到最大值时更新即可。另外此题是从前往后更新,可直接使用a[i]数组而省下一个dp数组。
//最大子序列和
#include <iostream>
#include <cstdio>
#include <math.h>
#include <string.h>
#include <string>
using namespace std;
int dp[];
int t,m,l,r,start,maxx;
int main()
{
scanf("%d",&t);
for(int i=;i<=t;i++)
{
scanf("%d",&m);
for(int j=;j<=m;j++)
{
scanf("%d",&dp[j]);
}
l = r = start = ;
maxx = dp[]; for(int j=;j<=m;j++)
{
if(dp[j-] >= )
dp[j] = dp[j-] +dp[j];
else
start = j;
if(dp[j] > maxx){
maxx = dp[j];
l = start;
r = j;
}
}
cout <<"Case "<<i<<":\n"<<maxx<<" "<<l<<" "<<r<<endl;
if(i != t)
cout<<endl;
}
return ;
}
第二种解法 ,直接在输入的时候判断是否形成最大子序列,如果数列小于零,则一直重排,不过maxx最好定义的足够小,否则会因为全部是负数这个点wa掉
#include <iostream>
#include <math.h>
#include <cstdio>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
for(int i=;i<=t;i++)
{
int m,k;
int maxx = -,sum = ,l = ,r = ,cnt = ,temp;// l 不是左下标 而是maxx序列的个数
scanf("%d",&m);
int m2 = m;
while(m--)
{
scanf("%d",&k);
sum += k;
cnt++;
if(sum > maxx){
l = cnt;
maxx = sum;
r = m2 - m;
}
if(sum < ){
sum = ;
cnt = ;
}
}
cout <<"Case "<<i<<":\n"<<maxx<<" "<<r-l+<<" "<<r<<endl;
if(i != t)
cout<<endl;
}
return ;
}
最大子序列和——HDU-1003 Max Sum的更多相关文章
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- HDOJ(HDU).1003 Max Sum (DP)
HDOJ(HDU).1003 Max Sum (DP) 点我挑战题目 算法学习-–动态规划初探 题意分析 给出一段数字序列,求出最大连续子段和.典型的动态规划问题. 用数组a表示存储的数字序列,sum ...
- hdu 1003 Max Sum (DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1003 Max Sum【动态规划求最大子序列和详解 】
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 1003 Max Sum && HDU 1231 最大连续子序列 (DP)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 1003 Max Sum * 最长递增子序列(求序列累加最大值)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- hdu 1003 MAX SUM 简单的dp,测试样例之间输出空行
测试样例之间输出空行,if(t>0) cout<<endl; 这样出最后一组测试样例之外,其它么每组测试样例之后都会输出一个空行. dp[i]表示以a[i]结尾的最大值,则:dp[i ...
- HDU 1003 Max Sum
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 1003 Max Sum(AC代码)
#include <stdio.h> int main(){ int i,t,j,n,x; int start,end,temp,max,sum; scanf("%d" ...
- hdu 1003 Max Sum (动态规划)
转载于acm之家http://www.acmerblog.com/hdu-1003-Max-Sum-1258.html Max Sum Time Limit: 2000/1000 MS (Java/O ...
随机推荐
- python-socket1
如何理解socket编程 就是两个进程,跨计算机,他俩需要通讯的话,需要通过网络对接起来.这就是 socket 的作用.打个比方吧,两个进程在两个计算机上,需要有一个进程做被动方,叫做服务器.另一个做 ...
- 关于c++中局部变量和全局变量的存储位置及内存回收机制
局部变量,参数变量存放在栈中,当离开作用范围后,分配的内存在作用范围外会被系统自动回收. new出来的内存空间存放在堆中,不受作用域管理,不会被系统自动回收,只有在使用delete删除或者整个程序结束 ...
- 查看字符串的编码chardet
The Universal Character Encoding Detector chardet.detect("str") 返回:{‘confidence’:1.0,'enco ...
- 2017.10.5北京清北综合强化班DAY5
拼不出的数lost.in/.out/.cpp[问题描述]3 个元素的集合{5, 1,2} 的所有子集的和分别是0,1, 2, 3, 5, 6, 7, 8.发现最小的不能由该集合子集拼出的数字是4.现在 ...
- zabbix发送邮件
1.zabbix服务器上已安装postfix邮件服务,如果没安装用yum安装sendmail也可以(简单) 2.vim /etc/mail.rc 在此配置中加上用户名及密码等,即可用这个账号发送邮件 ...
- 研华 RISC超低功耗3.5”单板电脑
产品简介: 这是一款搭载TI Sitara AM3358 Cortex-A8 1GHz高性能处理器的RISC 3.5”单板电脑.RSB-4221是一款稳定可靠.性能强大的低功耗平台,专为各种需要丰富I ...
- 微服务学习一 微服务session 管理
集群和分布式架构中: session管理有三种方法: 1: Cookie: 将Session对象保存在Cookie,保存在浏览器端.浏览器发送请求的时候,会把整个session放在请求里一起发送到se ...
- sql查询将列里面的值替换为别的值但是实际值不变
数据库有一张表BUG(缺陷记录表) 里面有字段severity(严重程度): severity的值实际为1,2,3,4,但希望在查询结果中将severity的1,2,3,4值显示为其他的值,但seve ...
- CCNet说明文档
1.CCNet安装步骤 1) 安装CCNet服务器端:CruiseControl.NET-1.8.5.0-Setup.exe 2) 安装CCNet客户端:CruiseControl.NET ...
- sql 根据年份、月份查询数据
CREATE TABLE [dbo].[T_UserAccess]( ,) NOT NULL, [UserId] [int] NULL, [UserType] [int] NULL, ) NULL, ...