2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5
Case 1: 14 1 4 Case 2: 7 1 6
题意:
给定一个序列,求序列的最大和。
思路:
dp 。从头挨个开始求和,若sum<0,重置start。
代码:
#include<iostream>
#include<string.h>
#include<fstream>
#include<stdlib.h>
using namespace std;
int main()
{
freopen("C:\\Users\\liuzhen\\Desktop\\11.txt", "r", stdin);
int T;
cin >> T;
for (int ii = 1; ii <= T; ii++)
{
int arr[100001];
memset(arr, 0, sizeof(arr));
int N;
cin >> N;
for (int j = 0; j<N; j++)
{
cin >> arr[j];
}
//freopen("con","r",stdin);
int ans = 0;
int sum = 0;
int s = 0, e = 0;
int ss = 1;
for (int i = 0; i<N; i++)
{
if (i == 0)
{
ans = arr[0];
sum = arr[0];
s = 1; e = 1;
continue;
}
sum += arr[i];
if (sum>ans)
{
e = i + 1;
s = ss;
ans = sum;
}
if (0>sum)
{
sum = 0;
ss = i + 2;
}
}
cout << "Case " << ii << ":" << endl;
cout << ans << " " << s << " " << e << endl << endl;
//dp(arr,N);
//freopen("C:\\Users\\liuzhen\\Desktop\\11.txt","r",stdin);
}
freopen("con", "r", stdin);
system("pause");
return 0;
}