E44 单调队列优化DP 修剪草坪
E44 单调队列优化DP 修剪草坪_哔哩哔哩_bilibili
P2627 [USACO11OPEN] Mowing the Lawn G - 洛谷

// 单调队列+DP O(n) #include<bits/stdc++.h> using namespace std; const int N=100010; int n,k,w[N],q[N]; long long f[N],sum; int main(){ cin>>n>>k; k++; for(int i=1;i<=n;i++) cin>>w[i],sum+=w[i]; long long s=1e18; for(int i=1,h=1,t=0; i<=n; i++){ while(h<=t && q[h]<i-k) h++; while(h<=t && f[q[t]]>=f[i-1]) t--; q[++t]=i-1; f[i]=f[q[h]]+w[i]; if(i>n-k) s=min(s,f[i]); } cout<<sum-s; }
浙公网安备 33010602011771号