pat 1007. Maximum Subsequence Sum (25)
2014-04-23 14:37
507 查看
//数据
10
-10 1 2 3 4 -5 -23 3 7 -21
5
0 0 0 0 0
5
1 2 -3 0 2
5
1 2 0 -3 2
5 //容易被忽略的数据
-1 -2 -3 0 -4
5
-1 -2 -3 -4 -5
//求最大字段和 并输出最大子段的始 终元素
//时间复杂度为O(N)
//下面这段代码是核心
//从i=0时开始遍历,若找到更大的子段和则更新当前最大字段和及最大子段和的始 终元素
//若当前子段和为0,则从下一个元素开始从新遍历(重点)
///即:序列和为0的序列ai---aj中,没有以ak(i<k<j)为起点的子段的和 大于以ai为起点的子段和 的子段
for(i=0; i<n; i++) {
sumsub+=variable[i];
if(sumsub>maxsub) {
maxsub=sumsub;
subend=i;
subbegin=temp;
} else if(sumsub<0) {
sumsub=0;
temp=i+1;
}
}
//Code:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
const int maxn=10003;
int variable[maxn];
int n;
int subbegin,subend;
int maxsub,sumsub;
void subMaxSum() {
int i;
maxsub=-1;
sumsub=0;
subbegin=0;
int temp=0;
subend=0;
for(i=0; i<n; i++) {
sumsub+=variable[i];
if(sumsub>maxsub) {
maxsub=sumsub;
subend=i;
subbegin=temp;
} else if(sumsub<0) {
sumsub=0;
temp=i+1;
}
}
printf("%d %d %d\n",maxsub,variable[subbegin],variable[subend]);
}
int main() {
int i,j;
while(cin>>n) {
bool flag=false;
for(i=0; i<n; i++) {
cin>>variable[i];
if(variable[i]>=0)
flag=true;
}
if(flag==false) {
printf("0 %d %d\n",variable[0],variable[n-1]);
} else
subMaxSum();
}
return 0;
}
10
-10 1 2 3 4 -5 -23 3 7 -21
5
0 0 0 0 0
5
1 2 -3 0 2
5
1 2 0 -3 2
5 //容易被忽略的数据
-1 -2 -3 0 -4
5
-1 -2 -3 -4 -5
//求最大字段和 并输出最大子段的始 终元素
//时间复杂度为O(N)
//下面这段代码是核心
//从i=0时开始遍历,若找到更大的子段和则更新当前最大字段和及最大子段和的始 终元素
//若当前子段和为0,则从下一个元素开始从新遍历(重点)
///即:序列和为0的序列ai---aj中,没有以ak(i<k<j)为起点的子段的和 大于以ai为起点的子段和 的子段
for(i=0; i<n; i++) {
sumsub+=variable[i];
if(sumsub>maxsub) {
maxsub=sumsub;
subend=i;
subbegin=temp;
} else if(sumsub<0) {
sumsub=0;
temp=i+1;
}
}
//Code:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
const int maxn=10003;
int variable[maxn];
int n;
int subbegin,subend;
int maxsub,sumsub;
void subMaxSum() {
int i;
maxsub=-1;
sumsub=0;
subbegin=0;
int temp=0;
subend=0;
for(i=0; i<n; i++) {
sumsub+=variable[i];
if(sumsub>maxsub) {
maxsub=sumsub;
subend=i;
subbegin=temp;
} else if(sumsub<0) {
sumsub=0;
temp=i+1;
}
}
printf("%d %d %d\n",maxsub,variable[subbegin],variable[subend]);
}
int main() {
int i,j;
while(cin>>n) {
bool flag=false;
for(i=0; i<n; i++) {
cin>>variable[i];
if(variable[i]>=0)
flag=true;
}
if(flag==false) {
printf("0 %d %d\n",variable[0],variable[n-1]);
} else
subMaxSum();
}
return 0;
}
相关文章推荐
- pat 1007. Maximum Subsequence Sum (25)
- PAT 解题报告 1007. Maximum Subsequence Sum (25)
- PAT(甲级) 1007. Maximum Subsequence Sum (25)
- PAT-A 1007. Maximum Subsequence Sum (25)
- PAT练习(4)-1007. Maximum Subsequence Sum (25)
- PAT-1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25)
- [PAT]1007. Maximum Subsequence Sum (25)@Java
- PAT 1007. Maximum Subsequence Sum (25) 最大子序列和
- 1007. Maximum Subsequence Sum (25)-PAT
- 【PAT】1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) 最大连续子数组,一次遍历,stack辅助
- pat 1007. Maximum Subsequence Sum (25)
- PAT甲题题解-1007. Maximum Subsequence Sum (25)-求最大子区间和
- 【c++】PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)*
- PAT 甲级 1007. Maximum Subsequence Sum (25) 【最大子串和】
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) dp
- PAT 1007. Maximum Subsequence Sum (25)
- 【PAT】【Advanced Level】1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) vector