zoukankan      html  css  js  c++  java
  • Least Cost Bracket Sequence(greed)

     题意

    给出一个字符串,包含'(',')','?'三种字符,将一个'?'变为左括号需要花费ai,将一个'?'变成右括号需要花费bi

    求将字符串变为合法括号序列的最小代价和此时的合法括号序列,无解输出'-1'

    数据

    字符串长度为偶数,长度 <= 5*10^4,

    1 <= ai,bi <= 10^6

    输入

    (??)

    1 2

    2 8

    输出

    4

    ()()

    假设我们现在从左向右看让所有的'?'变成')'这样子的话就是可以的,但是如果发现')'的数量大于'('那么我们从前面找到一个变成'('代价最小的'?'然后让他变成'(',然后记录一下路径就可以了。我们现在推道一下为什么可以这样子做,这是一个贪心的思想。。。

    ()??()))()  然后我们从第一个位置开始模拟,因为不是'?'所以正常进行,这种问题我们只要设个边界就行了,然后进行到第二个位置也不是'?'我们标记一下这个是'('==1')'==1然后我们进行到了'?'号的位置,那么这个时候我们肯定要把'?'改成'('的。或者在前面找到一个是问号然后变成了')'的东西,然后他们比较一下就行了,我们这个东西可以用一个优先队列来维护,这样子这个复杂度就可以过这个问题了。。。。

    现在我们最后的一个问题还没有解决:  是不是我们可以不用管从'?'改成'('的东西了,答案是肯定的,按照我们的思路第一点就是这个'('是不得不改的,要死不改就不能有合法的括号匹配了,其次就是我们以后真的用不到了。。。

  • 相关阅读:
    idea+maven使用
    MySQL数据库一个字段对应多个值得模糊查询
    什么时候用接口?什么时候用抽象类?
    线程的死锁和死锁解决的实际案例
    idea 实用插件
    linux查看日志报错
    mysql日期模糊查找的方法
    mysql 日期函数
    win10安装sonarqube
    docker中mysql数据库导出部分数据
  • 原文地址:https://www.cnblogs.com/Heilce/p/6422685.html
Copyright © 2011-2022 走看看