运行环境VS2017
题目链接:杭电OJ 1003
主要思想是:
用d[i]来存放前i项中最大的和,得到end,然后再倒推,得起始的位置begin
然而在程序42行的疑问,大家可以讨论一下吗????
#include <stdio.h>
#include <string.h>
int a[100000 + 11];
int d[100000 + 11];
int main()
{
int N,n,i,end,begin,inf,sum,p;
scanf_s("%d", &N);
for (p = 1; p <= N;p++)
{
inf = -1999;
memset(a, 0, sizeof(a));
memset(d, 0, sizeof(d));
scanf_s("%d", &n);
for(i=1;i<=n;i++)
{
scanf_s("%d", &a[i]);
if (a[i] + d[i - 1] > a[i])
{
d[i] = a[i] + d[i - 1];
}
else
{
d[i] = a[i];
}
if (d[i] > inf)
{
inf = d[i];
end = i;
}
}
sum = 0;
for (i = end; i >= 1; i--)
{
sum += a[i];
if (sum == inf)
{
begin = i;
}
}
printf("Case %d:\n",p);
printf("%d %d %d\n", inf, begin, end);//改成inf就是AC,改成sum就是WA????
if (p != N)
{
printf("\n");
}
}
return 0;
}