题目大意:给定序列个数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 ;
}

最新文章

  1. NoSql数据库初探-mongoDB读操作
  2. [Django]模型学习记录篇--基础
  3. zabbix_sender自定义监控
  4. 项目中必须知道的关于CSS+DIV的常识
  5. svchost占用内存达1-2G的问题
  6. 网站性能Web压力测试工具webbench
  7. Java NIO之Selector
  8. Keil 的调试命令、在线汇编与断点设置
  9. hdu5023--A Corrupt Mayor&#39;s Performance Art
  10. CMake入门指南
  11. 【转】如何解决plsql查询oracle数据库语句where条件带有中文无法匹配结果
  12. androidstudio上传代码到git上
  13. css3的特性
  14. 腾讯2019年暑期实习生招聘在线笔试技术研究和数据分析方向第二题(python)
  15. vue生命周期探究(一)
  16. SpringBoot入门(0) HelloWorld的实现与原理分析
  17. Java学习笔记之——if条件语句和三目运算符
  18. GC收集器种类
  19. 怎么打乱List中元素的顺序
  20. Thinking in Java笔记之类及对象的初始化

热门文章

  1. jQuery学习(2)
  2. KbmMW-及相关
  3. Delphi Stringlist Delimiter如何区分TAB和空格
  4. jQuery与javascript库
  5. 机器学习(十七)— SVD奇异值分解
  6. Java集合类---&gt;入门下篇
  7. 【leetcode】Construct Binary Tree from Inorder and Postorder Traversal
  8. Ubuntu 16.10 中文环境 Shell输出英文提示
  9. SHOI2016 随机序列
  10. CodeForces - 1019D(BZOJ3707圈地):Large Triangle (几何,找面积为S的三角形)