题目大意:求最大子串和,输出最大和,再输出此最大和的子串起始值和结尾值(不是位置点,受样例影响)。
解题思路:本题有 O(n) 时间复杂度的DP思路算法,还有 O(nlog(n)) 的分治算法,还有我这个O(n*n)的垃圾暴力(居然还能过,汗~)。
题目链接:https://www.patest.cn/contests/pat-a-practise/1007
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
#include <cmath>
using namespace std;
int main(int argc, char** argv) {
int n;
cin >> n;
int a[10005],sum[10005];
fill(sum,sum+10005,0);
for(int i=1;i<=n;++i)
{
cin >> a[i];
sum[i] = sum[i-1]+a[i];
}
int max = -1;
int L = -1,R = -1;
for(int i=0 ;i<=n;++i)
{
for(int j=i+1;j<=n;++j)
{
if(sum[j]-sum[i] > max)
{
max = sum[j]-sum[i];
L = i+1;
R = j;
}
}
}
if(max < 0)
cout << "0 " << a[1] << " " << a[n]<< endl;
else
{
cout << max << " " << a[L] << " " << a[R]<< endl;
}
return 0;
}