求第一题垃圾车
第二题代码:
#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;
}