求第一题垃圾车
第二题代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1e5+10;
int n,m;
int a[maxn];
int dp[maxn],sum[maxn];
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(i==0)sum[0]=a[0];
else sum[i]=sum[i-1]+a[i];
}
dp[0]=a[0];
for(int i=1;i<m;i++){ //长度<=m时
if(dp[i-1]<0){
dp[i]=dp[i-1]+a[i];
}else {
dp[i]=a[i];
}
}
int Min=sum[m-1];
//printf("%d\n",Min);
for(int i=m;i<n;i++){ //长度>m时
if(dp[i-m]<0){
dp[i]=dp[i-m]+sum[i]-sum[i-m];
}else{
dp[i]=sum[i]-sum[i-m];
}
//printf("%d--%d\n",i,dp[i]);
if(dp[i]<Min)Min=dp[i];
}
printf("%d\n",Min);
return 0;
}