#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int M = 100020;
int a[M];
int main()
{
int n,m;
int max,sum;
cin >> n;
for(int j = 1; j <= n; j++)
{
max = -999;
sum = 0;
cin >> m;
memset(a,0,sizeof(a));
int a1 = 0,b1 = 0,tmp = 0;
for(int i = 0; i < m; i++)
cin >> a[i];
for(int i = 0; i < m; i++)
{
sum += a[i];
if(sum > max)
{
a1 = tmp;
max = sum;
b1 = i;
}
if(sum < 0)
{
sum = 0;
tmp = i + 1;
}
}
cout << "Case "<<j<<":"<<endl;
cout << max<<" "<<a1+1 << " "<< b1+1 <<endl;
if( j != n)
cout << endl;
}
return 0;
}
本文介绍了一个通过遍历数组并使用动态规划思想来找出具有最大和的连续子数组及其起始和结束位置的算法实现。该算法适用于解决一系列与子数组最大和相关的问题。
601

被折叠的 条评论
为什么被折叠?



