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. Mac 环境部署Docker私有仓库

    docker的私有仓库类似maven的私服,一般用于公司内部搭建一个类似docker hub的环境,这样上传.下载镜像速度较快,本文将演示如何在mac上利用docker-machine搭建无需SSL证 ...

  2. 【原创】大叔问题定位分享(29)datanode启动报错:50020端口被占用

    集群中有一台datanode一直启动报错如下: java.net.BindException: Problem binding to [$server1:50020] java.net.BindExc ...

  3. 使用putty连接Ubuntu虚拟机,使用ssh方式访问

    1 前言 Ubuntu14.04版本是可以直接连接的,没想到新装的Ubuntu18.04竟然没有默认安装ssh. 则安装一下open-ssh-server就可以的. 2 步骤 2.1 更新一下源 命令 ...

  4. 2019 Android 高级面试题总结 从java语言到AIDL使用与原理

    说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如C ...

  5. mysql数据库基本语句

    我们除了可以在mysql数据库或phpmyadmin中登陆数据库我们还可以使用linux中命令进行创建,下面我来给大家介绍一个简单的数据库创建方法吧. 首选用putty连接linux服务器,进行命令行 ...

  6. 重写 console.log()

    /*重写console.log*/ console.log = (function(mFun){ return function(str){ mFun.call(console,'hello! ' + ...

  7. Jmeter性能测试之Monitor监控(SSHMon Samples Collector)

    前面写的一篇Monitor监控有缺陷, 这篇文章使用Jmeter4.0+的版本, 使用插件SSHMon Samples Collector来做资源监控 1. 官网下载插件: plugins-manag ...

  8. 关于saltstack

    配置Saltstack master 服务器 master服务器:saltstack.master  172.18.1.103 minion客户端:minion01              172. ...

  9. Exceptionless 生产部署笔记

    参考 部署用于生产的Exceptionlees(一个强大易用的日志收集服务) 1. 安装配置 redis 4.0  点击下载redis教学脑图 cd /opt wget http://download ...

  10. SQL窗口函数RANK(),Dense_Rank(),row_number(),NTILE()

    数据源 CREATE TABLE student( no int, ca ), name ), subject ), scorce int ); /* 数据 */ , ); , ); , ); , ) ...