题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003
大致题意:
求最大子段和,和最大子段和的起始位置和结束位置
大致思路:
简单最大子段和运用
最大子段和讲解:http://blog.csdn.net/hh__01/article/details/49205633
代码:
#include <iostream>
#include <memory.h>
using namespace std;
int data[100000];
int main()
{
int n;
int count;
int star, end;
int maxend, maxstar;//最大子段和的开头位置和尾部位置
int sum;
int max;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> count;
for (int j = 0; j < count; j++)
{
cin >> data[j];
}
star = 1;
end = 0;
sum = 0;
max = -9999999;
for (int j = 0; j < count; j++)
{
if (sum < 0)
{
sum = data[j];
star = j + 1;
end = star;
}
else
{
sum += data[j];
end++;
}
if (max < sum)
{
max = sum;
maxstar = star;
maxend = end;
}
}
cout << "Case " << i + 1 << ":" << endl;
cout << max << " " << maxstar << " " << maxend << endl;
if (i + 1 < n)//注意每个情况之间要隔一行,但是最后一行不用,否则会Presentation Error
{
cout << endl;
}
}
return 0;
}