【51NOD-0】1049 最大子段和】的更多相关文章

题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; const int inf = 0x3f3f3f3f; pair<long long, int> sum[N]; int a[N]; int n; int main(){ int i, j;…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049 令 dp[i]表示为以a[i]结尾的最大子段和,则  dp[i]=max(dp[i-1]+a[i],a[i]); 包含a[i-1] : dp[i]=dp[i-1]+a[i]; 不包含a[i-1] : dp[i]=a[i]; 然后扫一遍dp[i]求出最大值. 时间复杂度O(n),空间复杂度 O(n); #include <iostream> #include &l…
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049 #include<iostream> #include<algorithm> using namespace std; ]; ]; int main() { int n; cin>>n; ;i<n;i++){ cin>>a[i]; } ; b[]=a[]; ;i<n;i++){ ]>){ b[i]…
Input示例 6 -2 11 -4 13 -5 -2 Output示例 20 1.最大子段和模板 #include "bits/stdc++.h" using namespace std; #define rep(i, s, n) for(int i=s;i<n;i++) #define LL long long #define INF 0x3f3f3f3f #define PI acos(-1.0) #define E 2.71828 #define MOD 10000000…
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0.   例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13.和为20. Input 第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9) Output 输出最大子段和. Input示例 6 -2 11 -4 13 -5…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 对于普通的数组,只要求一次最大子段和即可.但是这题是可以循环的,所以要另外分析. 1:最大的值在原数组中间部分. 2:最大值是结尾部分和开头部分.(如果要循环,就是这种情况) 对于1情况可以做一次最大子段和.而第二种情况出现时因为,中间部分很小,加了后最后的值会变小,所以不能加,也就是说中间部分的 值取反后,是最大的.这样就可以先进行对原数组的值取反,然后求一次最…
N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13.和为20. 收起 输入 第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9) 输出 输出最大子段和. 输入样例 6 -2 11 -4 13 -5 -2 输出样例…
题目:传送门. 题意:中文题. 题解:求前缀和,并且标记每个数的下标,按照前缀和大小进行从小到大排序.随后进行遍历,如果满足下标data[i-1].id<data[i].id&&data[i-1].val<data[i].val:就更新最小值,因为是相近的,所以已经是最小值候选了,其余的绝对不可能了.那么为什么只考虑相邻的呢?因为如果A到B不能形成队列,A到C形成队列了,那么B到C一定是比A到C的数值更小,而且还一定能够形成队列(A与B不能形成队列,说明posA>posB…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1052 题意: 思路:设$dp[i][j]$表示前j个数构成i个字段时的最大值,并且必须以j结尾. 那么状态转移方程就是: ①$dp[i][j]=max(dp[i][j],dp[i][j-1]+a[j])$,此时是将j接在第i个字段的末尾,字段数不增加. ②$dp[i][j]=max(dp[i][j],dp[i-1][t],+a[j])$  $(i-1<=t<j)$,此…
有一个括号序列,现在要计算一下它有多少非空子段是合法括号序列. 合法括号序列的定义是: 1.空序列是合法括号序列. 2.如果S是合法括号序列,那么(S)是合法括号序列.3.如果A和B都是合法括号序列,那么AB是合法括号序列. Input 多组测试数据. 第一行有一个整数T(1<=T<=1100000),表示测试数据的数量. 接下来T行,每一行都有一个括号序列,是一个由'('和')'组成的非空串. 所有输入的括号序列的总长度不超过1100000. Output 输出T行,每一行对应一个测试数据的…