5227: 最大子列和问题

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交:
76
          
测试通过:46

描述

给定KK个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。

本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:

数据1:与样例等价,测试基本正确性;

数据2:102个随机整数;

数据3:103个随机整数;

数据4:104个随机整数;

数据5:105个随机整数;

输入

输入第1行给出正整数K (K≤100000);第2行给出K个整数,其间以空格分隔。

输出

在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。

样例输入

6
-2 11 -4 13 -5 -2

样例输出

20

分而治之

 #include <bits/stdc++.h>
using namespace std;
const int N=1e5+;
int arr[N];
int judge(int first,int ending){ //分成子问题来做
if(first==ending){ //最终都会变成长度为1的子序列
return arr[first];
}
int mid=(first+ending)/;
int sum1=judge(first,mid); //mid左边的最大值
int sum2=judge(mid+,ending); //mid右边的最大值
int lmax=arr[mid],rmax=arr[mid+],sum=;
for(int i=mid;i>=first;i--){
sum+=arr[i];
lmax=max(lmax,sum);
}
sum=;
for(int i=mid+;i<=ending;i++){
sum+=arr[i];
rmax=max(rmax,sum);
}
int ans=lmax+rmax;
if(ans<sum1) ans=sum1;
if(ans<sum2) ans=sum2;
return ans;
}
int main()
{
int n,num=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&arr[i]);
if(arr[i]<) num++;
}
if(num==n) {printf("0\n");return ;}
int zhi=judge(,n);
printf("%d\n",zhi);
return ;
}

dp

 #include <bits/stdc++.h>
using namespace std;
const int N=1e5+;
int main()
{
int n,dp[N],num=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&dp[i]);
if(dp[i]<) num++;
}
if(num==n) {printf("0\n");return ;}
int ans=dp[];dp[]=;
for(int i=;i<=n;i++){
if(dp[i-]>) dp[i]+=dp[i-];//dp[i]==max(dp[i],dp[i-1]+num[i])
else dp[i]+=;
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
return ;
} #include <bits/stdc++.h>
using namespace std;
const int N=1e5+; //求最长子序列 并且输出第一个元素和最后一个元素
int main()
{
int n,dp[N],num=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&dp[i]);
if(dp[i]<) num++;
}
if(num==n) {printf("0\n");return ;}
int flag,u,v,sum=,maxx=dp[];
for(int i=;i<=n;i++){
if(sum<){ //小于要舍弃
sum=dp[i];
u=i;
}
else sum+=dp[i];
if(sum>maxx){
maxx=sum;
flag=u;
v=i;
} }
printf("bian1:%d bian2:%d maxx=%d\n",u,v,maxx);
return ;
}

最长连续子序列(dp,分而治之递归)的更多相关文章

  1. TOJ 5065: 最长连续子序列

    5065: 最长连续子序列   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 140   ...

  2. HDU 1231.最大连续子序列-dp+位置标记

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

  3. 【BZOJ2423】[HAOI2010]最长公共子序列 DP

    [BZOJ2423][HAOI2010]最长公共子序列 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...

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

  5. POJ-2533最长上升子序列(DP+二分)(优化版)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 41944   Acc ...

  6. ACM_HDU 1231 最大连续子序列 (dp)_代码分析

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

  7. LCS最长公共子序列~dp学习~4

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 Palindrome Time Limit: 4000/2000 MS (Java/Others ...

  8. Longest Ordered Subsequence POJ - 2533 最长上升子序列dp

    题意:最长上升子序列nlogn写法 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  9. POJ 1458 最长公共子序列(dp)

    POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...

  10. hdu 1159 Common Subsequence(最长公共子序列 DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...

随机推荐

  1. 关于含RecyclerView的fragment来回切换时页面自动滑动到底部的解决方法

    原因: 在fragment中来回切换时RecyclerView获得了焦点,而RecyclerView的 focusableOnTouchMode属性默认是true,所以在切换时RecyclerView ...

  2. javascript中Math函数的属性与方法

    math函数的属性 Math.PI:返回圆周率. math函数的方法 绝对值: Math.abs(); 对数进行上舍入: Math.ceil(); 对数进行下舍入: Math.floor(); Mat ...

  3. js编译原理(你不知道的javascript)

    虽然通常将js归类为"动态"或"解释执行"语言,但其实也可把它看成是一门编译语言.只不过这个所谓的编译与传统的编译语言不同,它不是提前编译的,编译结果也不能在分 ...

  4. 基于BootStrap的initupload()实现Excel上传和获取excel中的数据

    简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group&q ...

  5. java设计模式自我总结---适配器模式

    上一篇博客说完了 java 23 中设计模式中的五种 创建性模式,由于篇幅过长,新开一贴今天开始学习结构型模式, 结构型模式包括以下七种:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式. ...

  6. 学习笔记: Expression表达式目录树详解和扩展封装

    1. 表达式链接扩展封装,ORM常用 And  Or /// <summary> /// 表达式访问者 /// </summary> public class Expressi ...

  7. ajax 函数回调

    var initTaxPriod = function (taxNo) { intitSearch(); $("#taxPeriod").html(""); t ...

  8. Tomcat Getshell

    安装环境 账号密码路径:Tomcat6.0/conf/tomcat-users.xml 弱口令扫描工具 后台默认登陆地址:html://xx.xx.xx.xx/manager/html 后台war f ...

  9. c#一步一步实现ORM(二)

    c#一步一步实现ORM(二) 上一篇描述了简单的思路,这一片我们来稍微细化一下 1插入的时候忽略某些字段 public int Insert<T>(T o, params string[] ...

  10. Ubuntu文件写入内容时出现错误 E121:无法打开并写入文件解决方案

    在安装某些软件过程中会让你新建个txt或者在输入vim /etc/profile命令时,输入完毕后保存文件时就会报错 E121:无法打开并写入文件解决方案,一般的解决状况就是输入如下命令: :w !s ...