zoukankan      html  css  js  c++  java
  • 省选模拟7

    A. 翻转硬币

      原题,但是思路很好。

      看到这种区间修改的操作可以想一想差分,将原序列差分之后我们得到了不超过2k个位置,那么就下来的问题是:给定若干操作,每种操作可以将两个距离为$a[i]$的点同时取反,求将整个序列变成0的最小操作次数。

      发现每个操作只会将两个位置同时取反,可以用bfs求出来任意将两个点同时取反且不改变其他点状态的最少步数,之后状压将这2k个点配对即可。发现每个点必然都会被合并,所以每次转移只要枚举未被选择的最小的点即可。

    B. 回文子串

      考场被我用$O(nq)$暴力水过去了。大约是暴力处理出来任意一个位置的回文半径,之后暴力扫询问区间统计答案。发现这个东西可以很容易的用线段树优化为区间赋值,单点查询某个位置的字母,区间查询一段区间的和,然而没打。

    C. 最大价值

      一个结论:选k个物品的最优方案必然包括选$k-1$个方案中的所有物品。

      可以有一个简单的$O(n^2)$暴力:按照a排序后,$f_{i,j}$表示前i个物品中选出j个的方案数,那么$f_{i,j}=max(f_{i-1,j-1}+a_{i}*(j-1)+b_{i},f_{i-1,j})$。

      根据上面那个结论,必然存在一个位置j使得这个j之前dp转移取后一半,之后取前一半。

      发现这个位置对应着dp数组的差分与当前物品价值的大小关系,所以可以考虑用平衡树维护差分序列,在平衡树上二分就可以得到这个最优位置,那么只需要支持在原序列中插入一个数,区间加法即可。

  • 相关阅读:
    WPF 模板(二)
    WPF 模板
    WFP 样式(复习用)
    wpf 特效学习
    MVC 开源控件学习
    设计模式学习
    使用带参数方式新增或修改可为空的非字符串类型数据到oralce数据库
    python(13)- 文件处理应用Ⅱ:增删改查
    051孤荷凌寒从零开始学区块链第51天DAPP006
    050孤荷凌寒从零开始学区块链第50天DAPP003
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12199463.html
Copyright © 2011-2022 走看看