说来惭愧,这一题明明在leetcode上面做过不止一次,但是再遇到还是不会做,其中也有一个原因是leetcode是不需要处理数据输入输出的,这就省了很大的功夫,还有一个原因是这道题目稍微改了一下,要求求自序列串的左右标,这还难倒我了,最后不得不参考别人代码,才勉强AC。
代码:
#include<iostream>
using namespace std;
int a[100000];
int main()
{
int count = 0;
cin >> count;
int s = count;
int k = 1;
while(s--)
{
int n;
cin >> n;
int i = 1;
for(i = 1 ; i <= n ; i++)
{
cin >> a[i];
}
int maxnum = a[1];
int thisnum = a[1];
int p = 1 , q = 1 , r = 1;
for(i = 2 ; i <= n ; i++)
{
if(thisnum + a[i] >= a[i])
{
thisnum = thisnum + a[i];
}
else{
thisnum = a[i];
p = i;
}
if(thisnum > maxnum)
{
maxnum = thisnum;
q = p;
r = i;
}
}
cout << "Case " << k << ":" << endl << maxnum << " " << q << " " << r << endl;
if(k != count)
{
cout << endl;
}
k++;
}
}
需要注意的是,hdu的数据是一边输入一边输出的,另一方面,hdu的数据输出,除了最后一行,其他都是要加两个endl的