东大OJ-最大子序列问题的变形
1302: 最大子序列
时间限制: 1 Sec 内存限制: 128 MB
提交: 224 解决: 54
[提交][状态][讨论版]
题目描述
给定一个N个整数组成的序列,整数有正有负,找出两段不重叠的连续子序列,使得它们中整数的和最大。两段子序列都可以为空。
输入
输出
对于每组输入,输出一行,仅一个整数,表示最大的和。
样例输入
9 185 -580 -889 701 964 -878 353 -761 608
样例输出
2273
第一步,求出最大子序列M;M表示max 第二步,求出不与M相交的第二大子序列S;S表示second 第三步,求出M中的最小子序列L;L表示little 最后,分两种情况:M+S或者是M一分为二; 若S+L<0,说明L太小了,M应该舍弃L,一分为二; 否则,M+=S;
#include<iostream>
using namespace std;
int a[1000007];
int m[1000007];
int from, to;
int M, S, L;
int n;
void init(){
int i;
M = 0;
m[0] = a[0];
int f, t;
f = t = 0;
for (i = 1; i < n; i++)
{
if (m[i - 1]>0){
m[i] = m[i - 1] + a[i];
t++;
}
else{
f = t = i;
m[i] = a[i];
}
if (M < m[i]){
M = m[i];
from = f;
to = t;
}
}
}
void getS(){
int i;
int mm = 0;
for (i = 0; i < from; i++){
if (m[i]>mm)
mm = m[i];
}
int now = a[to + 1];
for (i = to + 2; i < n; i++){
if (now>0){
now += a[i];
}
else{
now = a[i];
}
if (now > mm)mm = now;
}
S = mm;
}
void getL(){
int i;
int ll = a[from];
int now = a[from];
for (i = from + 1; i < to + 1; i++){
if (now<0){
now += a[i];
}
else{
now = a[i];
}
if (now < ll)ll = now;
}
L = ll;
}
int main(){
freopen("in.txt", "r", stdin);
while (scanf("%d", &n) != -1){
int i;
for (i = 0; i < n; i++){
scanf("%d", &a[i]);
}
init();
getS();
getL();
if (S + L < 0){
M -= L;
}
else{
M += S;
}
printf("%d\n", M);
}
return 0;
}
东大OJ-最大子序列问题的变形的更多相关文章
- POJ 1836 Alignment 最长递增子序列(LIS)的变形
大致题意:给出一队士兵的身高,一开始不是按身高排序的.要求最少的人出列,使原序列的士兵的身高先递增后递减. 求递增和递减不难想到递增子序列,要求最少的人出列,也就是原队列的人要最多. 1 2 3 4 ...
- Light oj 1013 - Love Calculator (LCS变形)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1013 题意: 给你两个字符串,让你构造出一个长度最小的字符串,且它的子序列包含 ...
- 东大OJ 2SAT 异或
看了十年才懂懂了十年才会会了十年才会写写了十年才写完写完了十年才能改对 #include<stdio.h> #include<string.h> struct res{ int ...
- 东大OJ-Max Area
1034: Max Area 时间限制: 1 Sec 内存限制: 128 MB 提交: 40 解决: 6 [提交][状态][讨论版] 题目描述 又是这道题,请不要惊讶,也许你已经见过了,那就请你再 ...
- HDU 5791 Two ——(LCS变形)
感觉就是最长公共子序列的一个变形(虽然我也没做过LCS啦= =). 转移方程见代码吧.这里有一个要说的地方,如果a[i] == a[j]的时候,为什么不需要像不等于的时候那样减去一个dp[i-1][j ...
- poj 2250 Compromise(区间dp)
题目链接:http://poj.org/problem?id=2250 思路分析:最长公共子序列问题的变形,只是把字符变成了字符串,按照最长公共子序列的思路即可以求解. 代码如下: #include ...
- hdu1503 最长公共子序列变形
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1503 题意:给出两个字符串 要求输出包含两个字符串的所有字母的最短序列.注意输出的顺序不能 ...
- ACM: 强化训练-Beautiful People-最长递增子序列变形-DP
199. Beautiful People time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
随机推荐
- UDT中的epoll
epoll 是为处理大量句柄而改进的poll,在UDT中也有支持.UDT使用了内核提供的epoll,主要是epoll_create,epoll_wait,epoll_ctl,UDT定义了CEPollD ...
- shell脚本实现随机筛选
#!/bin/bash name=(val1 val2 val3 val4 ...) a=$() #以时间产生随机数向39取余得到0~38的值
- 一、Android学习第一天——环境搭建(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第一天——环境搭建 Android 开发环境的搭建 ...
- 02章《深入C#数据类型》项目经理评分
一:创建MyOffices项目,创建UserInfo类,用来存储员工 工号,姓名,年龄,评价,年度得分 二:创建查看评分窗体(frmShow),添加定义员工数组,将员工数据绑定到frmShow窗体的L ...
- StackOverflow发布年度开发者调查报告:JavaScript备受欢迎
StackOverflow刚刚发布了年度开发者调查报告,访问了来自173个国家的56033名编程人员,发现几乎所有开发者都精通于JavaScript.具体说来就是,超过85%的全栈开发者.超过90%的 ...
- 关于OATUH中的AUTHRAZITON CODE和TOKEN的关系,实际上就是这么回事
关于OATUH中的AUTHRAZITON CODE和TOKEN的关系,实际上就是这么回事 每回要拿AUTHRAZITON CODE换取TOKEN,然后才能正常通信, 为什么要多一步呢?直接给TOKEN ...
- u3d_小游戏_拼图_1_生成碎片(非随机)
http://blog.csdn.net/cube454517408/article/details/7907247 首先是参考此文: main.cs作用:1.大图的拆分 2.判断是否成功 3.对碎 ...
- 时间就像Hourglass一样,积累(沉淀)越多,收获越大
package cn.bdqn; public class Hourglass { public static void main(String[] args) { for (int i = 2; i ...
- SQL注入技术专题—由浅入深【精华聚合】
作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...
- TabBarController
1.两种方式创建系统TabBarController -(id)init{ self = [super init]; if( self ) { //newTask HSNewTaskViewContr ...