萌新求助,为什么只有90分

P2627 [USACO11OPEN] Mowing the Lawn G

哦哟筷子 @ 2019-06-19 14:53:19

#include<bits/stdc++.h>
using namespace std;
int n,k;
long long a[100010],pre[100010],f[100010];
struct node{
    int index;
    long long x; //x表示f[i-1]-pre[i] 
}aq[100010]; 
deque <node> q;
int que(int i) {
    node m,ans;
    m.x=f[i-1]-pre[i];
    m.index=i;
    if(q.front().index+k<i) {
        q.pop_front();
    }
    ans=q.front();
    while(q.empty()==0&&q.back().x<=m.x) {
        q.pop_back();
    }
    q.push_back(m);
    return ans.x;
}
int main() {
    scanf("%d%d",&n,&k);
    for (int i=1;i<=n;i++) {
        scanf("%lld",&a[i]);
        pre[i]=a[i]+pre[i-1];
        aq[i].index=i;
    }
    f[1]=a[1];
    node t;
    t.x=0;
    t.index=0;
    q.push_front(t);

    for (int i=1;i<=n;i++) {
        f[i]=que(i)+pre[i];
//      printf("%lld\n",f[i]);
    }
    printf("%lld",max(f[n-1],f[n]));
    return 0;
}
//状态转移方程:f[i]=max(f[j-1]+pre[i]-pre[j]); i-k<=j<=i;

评测记录


by 空の軌跡 @ 2019-06-19 15:06:27

e


by 哦哟筷子 @ 2019-06-30 20:35:39

没有人吗?? 我太弱了,不配得到dalao的帮助吗??


|