东大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 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
随机推荐
- Linux系统监控命令之iotop
iotop命令 iotop命令是一个用来监视磁盘I/O使用状况的top类工具.iotop具有与top相似的UI,其中包括PID.用户.I/O.进程等相关信息.Linux下的IO统计工具如iostat, ...
- Android 播放电影时滑动屏幕调整屏幕亮度(转)
(转自:http://blog.csdn.net/piaozhiye/article/details/6544450) 发现有一些主流的播放器播放电影时可以通过滑动屏幕调整屏幕亮度,其实实现起来也很容 ...
- Ezchip Tilera Tile-Mx100: Der 100-ARM-Netzwerkprozessor
Ezchip Tilera Tile-Mx100: Der 100-ARM-Netzwerkprozessor ARM-Kerne statt VLIW-Einheiten: Tileras neue ...
- 组合使用css选择器
今天看到有网站使用.classA.classB类似的选择器,不知道是否有人和我一样没有用过,所以了解一下,以下记录. 一.用法介绍 在css中.classA.classB指的是一个元素,同时满足cla ...
- hdu-5127------hdu5137
hdu-5127 思路: 本来正解好像是动态凸包,暴力10000+ms可以搞过去; hdu-5128 思路: 枚举两个长方形的对角线,然后判断是否不相交,更新答案就好; hdu-5130 思路: 将题 ...
- UVALive 5058 Counting BST --组合数
题意:排序二叉树按照数插入的顺序不同会出现不同的结构,现在要在1~m选n个数,使按顺序插入形成的结构与给出的结构相同,有多少种选法. 解法:先将给出的结构插入,构造出一棵排序二叉树,再dfs统计,首先 ...
- Codeforces 549D. Hear Features[贪心 英语]
D. Haar Features time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- NOIP2000单词接龙[DFS]
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- JavaScript(DOM操作)(Window.document对象)
一.找到元素: docunment.getElementById("id"): 根据id找,最多找一个: var a =docunment ...
- SQL注入技术专题—由浅入深【精华聚合】
作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...