题解
答案最大是所有长度为\(l\)区间中的最小石子数,因为此时石子数最小的长度为\(l\)的区间石子数为\(0\),如果继续增加青蛙则无法越过该区间。而这样的答案是一定可以被构造出来的:设区间\([i,i+l-1],[i+1,i+l]\),令区间\([i+1,i+l-1]\)的青蛙位置不变,而\(i\)处的青蛙跃向\(i+l\)处。因为所有区间均可容纳最小石子数的青蛙,因此\(i+l\)一定可以承载\(i\)处的青蛙。具体实现利用前缀和即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,inf=0x3f3f3f3f;
int a[N],sum[N];//sum:前缀和
int main()
{
int w,l,ans=inf;
scanf("%d%d",&w,&l);
for(int i=1;i<w;i++) {scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i];}
for(int i=l;i<w;i++) ans=min(ans,sum[i]-sum[i-l]);
printf("%d",ans);
return 0;
}