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. ALU底层方法及计算机整数加减乘除模拟

    ALU是计算机CPU的核心,即 算术逻辑单元(arithmetic and logic unit)ALU有几大功能,是计算机计算最基础的功能:1.算术运算:包含加法.减法等2.逻辑运算:主要是布尔运算 ...

  2. Visual studio 编辑combobox程序卡死的问题

    问题描述:使用vs2017开发一个winform小程序,一用combobox就卡死. 问题解决:关闭有道词典的取词功能. 软件开多了,就容易有冲突啊!

  3. js-检测字符串出现次数最多,并返回

    function validateStr(val){ let obj = {}; let maxNum = -1; let maxStr; for(let i=0;i<val.length;i+ ...

  4. PHP 必知的 16 个编程法则

    以双下划线(__)开头的方法称为魔术方法 -__construct():类的构造方法: -__destruct():类的析构方法: -__call($funName, $arguments):当访问未 ...

  5. Apache服务器中设置端口映射和反向代理的方法

    在/etc/httpd/conf路径下的httpd.conf文件###new add for webui.cong###Include "E:/local/Wamp/bin/apache/A ...

  6. 网络流24题 ——运输问题 luogu 4015

    题目描述:这里 题面已经提示我们这是费用流了 那么由源点向所有仓库连边,容量为仓库原有货物量,费用为0 然后由所有零售商店向汇点连边,容量为一个零售商店的需求量,费用为0 最后由仓库向零售商店连边,容 ...

  7. 利用Centos服务器来搭建自己的splash,不再被安装的各种环境繁琐而担忧

    Centos7.5 ----- docker ------- splash               第一步:服务器环境的配置               第二步:dcoker环境的配置       ...

  8. scrapy相关:splash安装 A javascript rendering service 渲染

    0. splash: 美人鱼  溅,泼 1.参考 Splash使用初体验 docker在windows下的安装 https://blog.scrapinghub.com/2015/03/02/hand ...

  9. [转] Brook 搭建教程

    https://www.jiongjun.cc/technology/500.html 在搭建 brook 代理之前,首先要求你要有一台国外 vps,关于国外 vps 选择,可以参考这篇:推荐几款国外 ...

  10. mq_receive

    NAME mq_receive - 从消息队列中获取消息 (REALTIME) SYNOPSIS #include <mqueue.h> ssize_t mq_receive(mqd_t ...