zoukankan      html  css  js  c++  java
  • 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\) 为整数,那么

    代码

  • 相关阅读:
    Hibernate注解
    Hibernate 延迟加载
    Hibernate一对一映射关联
    Hibernate双向多对多关联
    映射一对多双向关联关系 cascade、inverse、属性
    Hibernate 和 快照
    脏检查 和 缓存清理机制
    Hibernate入门案例 增删改
    Oracle SQL函数
    ORACLE基本用法
  • 原文地址:https://www.cnblogs.com/xiaoziyao/p/15780273.html
Copyright © 2011-2022 走看看