CF965D Solution

题目链接

题解

答案最大是所有长度为\(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;
}
原文地址:https://www.cnblogs.com/violetholmes/p/14364011.html