哦哟筷子 @ 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的帮助吗??