题目描述:

这道题我先后做过三遍,结果每一遍都没有做出来。今天再仔仔细细的研究了一下,才发现用动态规划更好理解。

关于求最大连续子序列和的博文转载如下:https://www.cnblogs.com/coderJiebao/p/Algorithmofnotes27.html

最大连续子序列和的特点就是这个和一定比它的子序列中任何一个数要大,所以就有了判断条件。

已知一序列:把数列第一个数存入dp[0],从第一个数开始遍历,用一个dp数组去存两数之间的最大子序列和,因此得出动态转移方程式dp[i]=max(dp[i-1]+a[i],a[i]);

代码实现:

#include <iostream>
#include <cstdio>
using namespace std;
int a[],dp[];
int main()
{
int T,n,i=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
}
dp[] = a[];
int start = ,end = ,max = -;
int first = ,last = ;
for(int i=;i<n;i++)
{
if(dp[i-]+a[i]>=a[i]) //判断条件
{
dp[i] = dp[i-]+a[i];
end = i;
}
else//如果最长子序列和比a[i]还小,那么就从当前a[i]开始重新遍历
{
dp[i] = a[i];
start = end = i;
}
if(max<dp[i])
{
max = dp[i];
first = start;
last = end;
}
}
printf("Case %d:\n%d %d %d\n",++i,max,first+,last+);
if(T!=)
{
printf("\n");
}
}
return ;
}

另一个改进的版本:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int t,n,a[],Case=;
int thissum,maxsum,begin,end,postion;
cin>>t;
while(t--){
cin>>n;
for(int i=; i<n; i++)
cin>>a[i];
thissum=maxsum=a[];
begin=end=postion=;
for(int i=; i<n; i++){
if(thissum+a[i]<a[i]){//如对于6 -1 0 3 -4 3 2这组数据来说,就会更新postion
thissum=a[i];
postion=i;
}
else thissum+=a[i];
if(thissum>maxsum){
maxsum=thissum;
begin=postion;
end=i;
}
}
printf("Case %d:\n%d %d %d\n",Case++,maxsum,begin+,end+);
}
return ;
}

dp经典问题-最大连续子序列和 hdu1003的更多相关文章

  1. DP———1.最大子连续子序列和

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  2. 最大连续子序列和(DP)

    DP入门_最大连续子序列(最大连续和) Description 有一条崎岖的山路,该山路被分成了n段(1<=n<=100,000),每段山路的驾驶体验不同.作为老司机的刘师傅给每段山路打分 ...

  3. hdu1003 Max Sum【最大连续子序列之和】

    题目链接:https://vjudge.net/problem/HDU-1003 题目大意:给出一段序列,求出最大连续子序列之和,以及给出这段子序列的起点和终点. 解题思路:最长连续子序列之和问题其实 ...

  4. 最大连续子序列(简单DP实现)

    最大连续子序列 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大.我们一起用多种方式,逐步优化解 ...

  5. 最大连续子序列乘积(DP)

    题目来源:小米手机2013年校园招聘笔试题 题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含多个测试样例.每个测试样例的第一行仅包含正整数 ...

  6. DP专题训练之HDU 1231 最大连续子序列

    Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j < ...

  7. HDU-1231 简单dp,连续子序列最大和,水

    1.HDU-1231 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 3.总结:水 题意:连续子序列最大和 #include<iostre ...

  8. HDU 1231 最大连续子序列 --- 入门DP

    HDU 1231 题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同. /* HDU 1231 最大连续子序列 --- 入门DP */ #inclu ...

  9. 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 ...

随机推荐

  1. CDH 元数据库升级

    元数据库设计到的服务:scm库:server  hive库:hive  amon库:cloudera management服务 元数据库要从5.7.24升级到5.7.25,为了避免升级失败导致 集群不 ...

  2. django之跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  3. dubbo源码之Directory与LoadBalance

    Directory: 集群目录服务Directory, 代表多个Invoker, 可以看成List<Invoker>,它的值可能是动态变化的比如注册中心推送变更.集群选择调用服务时通过目录 ...

  4. Niagara workbench 介绍文档---翻译

    一. 发现在建立station的时候存在一些问题,所以对技术文档部分做一个详细的了解,在这之前对出现的问题总结一下 1.  在 Windows操作系统中Application Direction中可以 ...

  5. java爬虫笔记

    一.URl解释 1.URl统一资源定位符, Uniform Resource Location 也就是说是Internet上信息资源的字符串,所谓的网页抓取就是把URl地址中指定的网络资源从网络中读取 ...

  6. poj1155 依赖背包

    /* 依赖背包 dp[i][j]表示i结点为根的树选择j个用户时的最大剩余费用 即背包容量是j,价值是最大费用 */ #include<iostream> #include<cstr ...

  7. linux-umount挂载点无法卸载:device is busy(解决)

    umount不了的原因一般是由于有程序有用户在占用 解决方法: 1.      首先查找谁在占用:#fuser /mnt/nfs 得到进程号. 2.      查找进程:#ps –ef|grep 进程 ...

  8. 饮冰三年-人工智能-linux-08 软件包管理(Python的安装)

    1:软件包存放的位置 media/CentOS_6.9_Final/Packages文件夹下 2.RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. 2.1 常用的命 ...

  9. sublime快捷键的使用

    Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...

  10. urls.py路由系统分发的本质

    路由系统分发的本质 反向生成redirect跳转url 1.在urls.py中指定url的name from django.conf.urls import url from django.contr ...