ACWing 单调队列优化DP相关问题
皓首不倦
算法爱好者 码农一枚 欢迎志同道合 技术爱好者加微信CODER-GRH 非技术人员勿扰
展开
-
AcWing 单调队列优化DP 1091. 理想的正方形
import syssys.stdin = open('data.txt', 'r')'''先按照行求每行每一个滑动窗口中的最大值和最小值然后再纵向求每一列的滑动窗口最大最小值,然后统计每一个最大值最小值二元组的差值的最小值即可'''from collections import dequem, n, k = map(int, input().split())arr = []for i in range(m): arr.append( list(map(int, inp.原创 2020-08-02 21:14:59 · 155 阅读 · 0 评论 -
AcWing 单调队列优化DP问题 1090. 绿色通道
'''二分搜索可能的空题段的长度,用单调队列优化的DP验证此空题段长度下,能够找到合法的选择方案'''from collections import dequen, t = map(int, input().split())arr = list( map(int, input().split()) )# 验证空题段长度为emp_len,是否有可行方案def valid(emp_len): # dp(i)表示前i个作业中做选择, 最后一个作业做了的情况下,总开销最小值...原创 2020-08-02 21:13:48 · 171 阅读 · 0 评论 -
AcWing 单调队列优化DP问题 1089. 烽火传递
from collections import dequen, m = map(int, input().split())cost = list( map(int, input().split()) )# dp(i) 表示前i个烽火台进行选择,且最后一个烽火台点燃的所有合法方案中,最小开销的数值# dp(i) = cost(i) + min(dp(i-1), dp(i-2), ... dp(i-m)) 其实dp(i)就依赖于前面长度为m# 滑动窗口中的最小值dp = [0] * nque.原创 2020-08-02 21:12:36 · 184 阅读 · 0 评论 -
AcWing 单调队列优化DP问题 1088. 旅行问题
import syssys.stdin = open('data.txt', 'r')'''问题做一下转换,把环拆开,组成长度为原来两倍的序列,把每个车站的油量和下一步的距离的差值作为数组元素的数值,对这个长度是2n的数组求前缀和序列,其实题目要求的就是所有长度是n的滑动窗口里面前缀和的最小值和窗口开始位置前面一个前缀和的差值的最小值是不是小于0,如果小于0,说明中间n次移动至少有一次出现了没有油的情况,顺时针和逆时针都做一遍单调队列求滑动窗口最小值的流程,两次结果有一次是成功的,就可以从.原创 2020-08-02 21:11:11 · 186 阅读 · 0 评论 -
AcWing 单调队列优化DP相关问题 1087. 修剪草坪
import syssys.stdin = open('data.txt', 'r')from collections import dequen, m = map(int, input().split())arr = []for i in range(n): arr.append(int(input()))'''dp(i)表示前i头牛的合法选择中最大总价值的数值用最后一头牛的状态切分状态1. 最后一头牛不选 子集1的最大价值就是dp(i-1)2. 最后一头牛选,以结尾.原创 2020-08-01 14:15:10 · 199 阅读 · 0 评论 -
AcWing 单调队列优化DP相关问题 135. 最大子序和
import syssys.stdin = open('data.txt', 'r')'''首先求序列的前缀和序列s, 将问题转换一下,以arr[i]结尾的长度不超过m的和最大的连续子序列就是在s[i]前面的m个数中找最小的一个s[k],s[i]-s[k]就是以arr[i]结尾的长度不超过m的和最大的连续子序列的和,其实问题就转换成了单调队列求滑动窗口极值问题'''from collections import dequen, m = map(int, input()....原创 2020-08-01 14:14:16 · 184 阅读 · 0 评论