多么好的一道题,遍历,把输入存进数组,再遍历,超时!
超时代码:
#include
using namespace std;
int main()
{
int a[100000];
int T, b,c,d,m=1,max,sum = 0;
int i, j;
cin >> T;
if (T >= 1 && T <= 20)
T = T + 1;//输入比较的例数
else
T = 0;
while (T--)//循环次数
{
int n;//每一次的数字数
cin >> n;
for (i = 0; i < n; i++)//输入数字
{
cin >> b;
if (b<1000 && b>-1000)
a[i] = b;
}
max = a[0];
for (int i = 0; i <= n; i++) {
sum = 0;
for (int j = i; j <= n; j++) {
sum = sum + a[j];
if (sum > max) {
//sum=sum+a[j];
max = sum;
c = i;
d = j;
}
}
}
cout << "case:" << m << endl;
cout << max << " "<< c << " "<< d << endl << endl;
m++;
}
}
显然遍历是不可以的,费时耗力,只能输入的时候直接比较了
#include <iostream>
using namespace std;
int main()
{
int j, n, m, s = 0,temp = 0,start, end;
int max = -1001;
int sum = 0;
int q = 1;
cin >> n;
while (n--)
{
sum = 0;
temp = 0;
max = -1001;
s = 0;
cin >> m;
while (m--)
{
cin >> j;
sum += j;
if (sum > max)
{
max = sum;
start = s;
end = s + temp;
}
temp++;
if (sum < 0)
{ sum = 0;
s = s + temp;
temp = 0;
}
}
if (q != 1)
cout << endl;
cout << "Case " << q++ << ":" << endl;
cout << max << ' ' << start + 1 << ' ' << end + 1 << endl;;
}
}