• 省选模拟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数组的差分与当前物品价值的大小关系,所以可以考虑用平衡树维护差分序列,在平衡树上二分就可以得到这个最优位置,那么只需要支持在原序列中插入一个数,区间加法即可。

  • 相关阅读:
    CentOS 下实现两台服务器之间的共享NFS
    CentOS 下安装无线哥的老爷机DELL的无线驱动
    PHP 如何读取一个1G的文件大小
    php 经典的算法题你懂的
    mongodb与mysql命令对比
    TCP协议的三次握手和四次挥手过程
    java 发送带Basic Auth认证的http post请求实例代码
    HTTP基本认证(Basic Authentication)的JAVA实例代码
    Http协议
    MySQL主从同步那点事儿
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12199463.html
Copyright © 2020-2023  润新知