题目大意:
在一个长度为 (n) 的序列中求出长度为 ((k+1)) 的最大子段。
正文:
本题唯一的需要注意的一点是当 (k=n) 时要输出所有数的和,像我的考场代码:
scanf("%d%d", &n, &k);
k++;
if(k > n) k = n;
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= k; i++)
op += a[i];
for (int i = k + 1; i <= n; i++)
{
if(ans < op) ans = op;
op += a[i] - a[i - k];
}
printf("%lld", ans);
要是 (nleq k) 就锅了。
正确代码:
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= k + 1; i++)
op += a[i];
for (int i = min(k + 1, n); i <= n; i++)
{
if(ans < op) ans = op;
op += a[i + 1] - a[i - k];
}
printf("%lld", ans);