PAT甲级1007 Maximum Subsequence Sum (25分)
题目:
解题思路:dp问题,用temp变量记录连续的和,当temp小于零时肯定不符合最大值题意,如果全都小于零的话,将temp赋值0,判断如果当前的temp大于sum,那么更新sum的值并且记录左右连续序列的下标~~
下面附上AC代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int sum=-1,temp=0,templeftindex,indexleft=0,indexright=n-1;//不需要rightindex因为可以用i赋值
vector<int> a(n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
temp=temp+a[i];
if(temp<0){
temp=0;
templeftindex=i+1;//从右边开始数一数
} else if(temp>sum){//成功一次,记录最左边的index
sum=temp;
indexleft=templeftindex;
indexright=i;
}
}
if(sum<0) sum=0;
printf("%d %d %d",sum,a[indexleft],a[indexright]);
return 0;
}