最长连续子序列(dp,分而治之递归)
5227: 最大子列和问题
总提交:
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,分而治之递归)的更多相关文章
- TOJ 5065: 最长连续子序列
5065: 最长连续子序列 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 140 ...
- HDU 1231.最大连续子序列-dp+位置标记
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 【BZOJ2423】[HAOI2010]最长公共子序列 DP
[BZOJ2423][HAOI2010]最长公共子序列 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
- 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 ...
- POJ-2533最长上升子序列(DP+二分)(优化版)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 41944 Acc ...
- ACM_HDU 1231 最大连续子序列 (dp)_代码分析
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...
- LCS最长公共子序列~dp学习~4
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 Palindrome Time Limit: 4000/2000 MS (Java/Others ...
- Longest Ordered Subsequence POJ - 2533 最长上升子序列dp
题意:最长上升子序列nlogn写法 #include<iostream> #include<cstdio> #include<cstring> #include&l ...
- POJ 1458 最长公共子序列(dp)
POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...
- hdu 1159 Common Subsequence(最长公共子序列 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
随机推荐
- ALU底层方法及计算机整数加减乘除模拟
ALU是计算机CPU的核心,即 算术逻辑单元(arithmetic and logic unit)ALU有几大功能,是计算机计算最基础的功能:1.算术运算:包含加法.减法等2.逻辑运算:主要是布尔运算 ...
- Visual studio 编辑combobox程序卡死的问题
问题描述:使用vs2017开发一个winform小程序,一用combobox就卡死. 问题解决:关闭有道词典的取词功能. 软件开多了,就容易有冲突啊!
- js-检测字符串出现次数最多,并返回
function validateStr(val){ let obj = {}; let maxNum = -1; let maxStr; for(let i=0;i<val.length;i+ ...
- PHP 必知的 16 个编程法则
以双下划线(__)开头的方法称为魔术方法 -__construct():类的构造方法: -__destruct():类的析构方法: -__call($funName, $arguments):当访问未 ...
- Apache服务器中设置端口映射和反向代理的方法
在/etc/httpd/conf路径下的httpd.conf文件###new add for webui.cong###Include "E:/local/Wamp/bin/apache/A ...
- 网络流24题 ——运输问题 luogu 4015
题目描述:这里 题面已经提示我们这是费用流了 那么由源点向所有仓库连边,容量为仓库原有货物量,费用为0 然后由所有零售商店向汇点连边,容量为一个零售商店的需求量,费用为0 最后由仓库向零售商店连边,容 ...
- 利用Centos服务器来搭建自己的splash,不再被安装的各种环境繁琐而担忧
Centos7.5 ----- docker ------- splash 第一步:服务器环境的配置 第二步:dcoker环境的配置 ...
- scrapy相关:splash安装 A javascript rendering service 渲染
0. splash: 美人鱼 溅,泼 1.参考 Splash使用初体验 docker在windows下的安装 https://blog.scrapinghub.com/2015/03/02/hand ...
- [转] Brook 搭建教程
https://www.jiongjun.cc/technology/500.html 在搭建 brook 代理之前,首先要求你要有一台国外 vps,关于国外 vps 选择,可以参考这篇:推荐几款国外 ...
- mq_receive
NAME mq_receive - 从消息队列中获取消息 (REALTIME) SYNOPSIS #include <mqueue.h> ssize_t mq_receive(mqd_t ...