• P6631 [ZJOI2020] 序列 解题报告


    P6631 [ZJOI2020] 序列 解题报告:

    更好的阅读体验

    题意

    给定一个序列 \(a\),你每次可以选择三个操作中的一个:①区间减一②区间奇数下标减一③区间偶数下标减一。

    求至少要多少次操作才能让序列变成全 \(0\)

    \(1\leqslant n\leqslant 10^5\)

    分析

    搞了好多天的毒瘤题,写篇题解帮助一下我这样的萌新。

    我们记操作集合为 \(S\)(注意不是三种操作,而是每个区间的每种操作都在集合内),再记 \(x_t\) 为操作 \(t\) 的使用次数,于是列出线性规划式:

    \[\text{minimize }\sum_{t\in S}x_t\\ \text{s.t. }\sum_{t\ni i}x_t=a_i\\ x_t\geqslant 0 \]

    改写一下:

    \[\text{minimize }\sum_{t\in S}x_t\\ \text{s.t. }\sum_{t\ni i}x_t\geqslant a_i\\ -\sum_{t\ni i}x_t\geqslant -a_i\\ x_t\geqslant 0 \]

    由于上面的变量太多限制太少,然后对上面的问题对偶(令 \(p_i,q_i,r_i\) 分别为二、三、四行的对偶变量)

    \[\text{maximize }\sum a_i(p_i-q_i)\\ \sum_{i\in S}(p_i-q_i)+r_t=1\\ p_i,q_i,r_i\geqslant 0 \]

    我们发现可以直接去掉变量 \(r_t\),同时令 \(b_i=p_i-q_i\),那么得到:

    \[\text{maximize }\sum a_ib_i\\ \sum_{i\in S}b_i\leqslant 1\\ \]

    那么我们就是给每个位置赋一个权值 \(b_i\),使得每一个操作的权值和不超过 \(1\)

    可以通过调整法证明 \(b_i\) 为整数,那么

    代码

  • 相关阅读:
    数值的扩展
    字符串的扩展
    变量的解构赋值整理
    let和const命令整理
    解析vue2.0中render:h=>h(App)的具体意思
    菜单栏的显示与隐藏
    vue的事件绑定
    CSS3实现3D地球自转行星公转
    MongoDB命令的简单操作(一)
    canvas扇形进度圈动态加载
  • 原文地址:https://www.cnblogs.com/xiaoziyao/p/15780273.html
Copyright © 2020-2023  润新知