空题段长度即为单调队列长度区间 每次二分答案进行check即可 #include<bits/stdc++.h> using namespace std; ; const int inf=0x3f3f3f3f; int n,t,l,r,mid,ans; int a[N],q[N],f[N]; int head,tail; bool check(int mid){ memset(f,,sizeof f); memset(q,,sizeof q); head=tail=; ;i<=n;i++)…
题目大意:给定一个 N 个非负整数数组成的序列,每个点有一个贡献值,现选出其中若干数,使得每连续的 K 个数中至少有一个数被选,要求选出的数贡献值最小. 题解:设 \(dp[i]\) 表示考虑了序列前 i 个数的情况,且第 i 个数被选上时的最小贡献值,因此状态转移方程为:\(dp[i]=min\{dp[j],j\in[i-k,i-1] \}+val[i]\). 这种状态转移方程满足:决策取值范围上下界均单调变化,每个决策在候选集合中插入和删除至多一次.因此可以用单调队列在决策候选集合上进行优…