Codeforces 3 D

题意:有一个括号序列,其中一些位置是问号,把第\(i\)个问号改成(需要\(a_i\)的代价,把它改成)需要\(b_i\)的代价。

问使得这个括号序列成立所需要的最小代价。

思路1:

这个是正统的贪心。

首先我们假设所有的位置上都是),那么我们在从左向右扫描的途中会发现一些问题。

比如:我们原来的序列是(??),现在假设成了())),那么在第三个字符处就会发现我们的打开的左括号数量为\(-1\),这是肯定不行的,所以我们必须把第二个字符或者第三个字符改成左括号以把左括号数量变成\(1\)。

那么就可以想出一个贪心的方案了:

我们从左向右扫描,如果把当前的问号改成右括号不会使打开的左括号数量出现问题,那么我们就把这个问号待定成右括号;

然后如果出现了问题,我们肯定要把所有的待定问号(包括当前这个)中改动代价最小的改成左括号。

这样我们就可以把左括号数量重新加成正的。

然后我们怎么维护代价最小的待定问号呢?直接用一个优先队列或者一个\(set\)就可以了。

思路2:

这个是过不了的\(dp\)。

我们肯定是考虑到了第\(i\)位,打开的左括号数量是\(j\),最小的代价。记为\(f(i,j)\)。

然后我们考虑转移。如果是左括号,那么转移到\(f(i+1,j+1)\),右括号,转移到\(f(i+1,j-1)\),问号,都要转移,同时加上代价。

可惜,这样会\(mle\)或\(tle\)。

所以考虑优化状态。(转移怎么优化啊。。。

首先我们记如果把从\(i\)开始的所有问号都改成右括号,会把打开的左括号数量减少多少为\(suf_i\)。

那么如果\(j>suf_i\),即所有的一起上都消不掉\(j\),或者\(j\not \equiv suf_i (mod\ 2)\),即把一些右括号改成左括号不可能消掉\(j\),那么这个状态就不要。

可惜这样还是会在第\(31\)个点上挂掉。

思路3:

这个是乱搞的线段树。

ly_61同学提出了用数据结构来优化贪心的方法,然后。。。

首先我们考虑把所有的问号都改成左括号。

然后把所有的问号的左括号改成右括号的代价从小到大排序。

然后按顺序一个个尝试把问号改成右括号,只要不会违背条件——在任何一个位置,这个位置为止打开的左括号数量大于等于\(0\)。

那么我们就可以用线段树来维护对于每一个位置打开的左括号数量。

我们把一个问号改成右括号所改变的是把从那个问号的位置开始一直到最后的所有位置的左括号数量\(-2\)。

改回来的代价是\(+2\)。(废话

然后就可以一个一个尝试辣

如果改到最后发现到最后那个位置的左括号数量不是\(0\),那肯定无解。

这个正确性不是那么显然,但最优性显然。下证正确性。

首先如果把所有的问号都改成左括号时到最后一位的打开的左括号数量不是偶数,则肯定无解。

那么我们需要改的问号的数量也是显然的,不妨记其为\(m\)。

然后就可以发现如果我们每一次修改都可以成功的话至多修改\(m\)个问号。

那么就要证最少修改\(m\)个问号了。

我才不会告诉你我不会证了呢

根据上文,至少有\(m\)个问号使得我们把它们都改成右括号之后可以满足要求

所以我们扫描之后就可以得到\(m\)个???

(其实这个正确性很迷辣。。。

(这个“证明”一点也不像是个证明辣。。。

(反正能过的方法就是好方法。。。

(其实可能有反例的吧。。。

【Codeforces 3D】Least Cost Bracket Sequence的更多相关文章

  1. 【47.40%】【codeforces 743B】Chloe and the sequence

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. 【codeforces 438D】The Child and Sequence

    [原题题面]传送门 [大致题意] 给定一个长度为n的非负整数序列a,你需要支持以下操作: 1:给定l,r,输出a[l]+a[l+1]+…+a[r]. 2:给定l,r,x,将a[l],a[l+1],…, ...

  3. CodeForces 3 D.Least Cost Bracket Sequence【贪心+优先队列】

    Description 给出一个括号序列,中间有一些问号,将第i个问号换成左括号代价是a[i],换成右括号代价是b[i],问如果用最少的代价将这个括号序列变成一个合法的括号序列 Input 第一行一个 ...

  4. 【贪心】【CF3D】 Least Cost Bracket Sequence

    传送门 Description 给一个序列,序列里面会有左括号.问号.右括号.对于一个\(?\)而言,可以将其替换为一个\((\),也可以替换成一个\()\),但是都有相应的代价.问:如何替换使得代价 ...

  5. 【 CodeForces - 392C】 Yet Another Number Sequence (二项式展开+矩阵加速)

    Yet Another Number Sequence Description Everyone knows what the Fibonacci sequence is. This sequence ...

  6. Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列

    D. Least Cost Bracket Sequence 题目连接: http://www.codeforces.com/contest/3/problem/D Description This ...

  7. CF3D Least Cost Bracket Sequence 贪心

    Least Cost Bracket Sequence CodeForces - 3D 题目描述 This is yet another problem on regular bracket sequ ...

  8. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  9. (CodeForces - 5C)Longest Regular Bracket Sequence(dp+栈)(最长连续括号模板)

    (CodeForces - 5C)Longest Regular Bracket Sequence time limit per test:2 seconds memory limit per tes ...

随机推荐

  1. Placement of class definition and prototype

    When I create a function, I can put the code for it after main if I put the prototype above main. Fo ...

  2. 浅析requests库响应对象的text和content属性

    在做爬虫时请求网页的requests库是必不可少的,我们常常会用到 res = resquests.get(url) 方法,在获取网页的html代码时常常使用res的text属性: html = re ...

  3. 数组去重(ES5、ES6)

    对象赋值思想:(接收后台数据绘制统计图用到了该想法) // ES5 /** * 数组.字符串去重 * @param {[string/array]} [数组] * @return {[array]} ...

  4. Chrome浏览器跨域

    配置新版Chrome浏览器跨域,需要创建用户数据文件夹,在其中保存浏览器的缓存.历史记录.收藏夹等数据. Windows系统Chrome跨域 1 下载Chrome 64位绿色版,解压缩,并在桌面创建快 ...

  5. 最全最新的opencv版本下载

    opencv和opencv_contrib版本都可以到这个github下载 包括编译好的vc14和vc15window版本 还有源码版,可以自行cmake

  6. Visualforce控制器

    Visualforce框架是遵循MVC结构的.Visualforce页面代表了"视图"部分,Salesforce的各种对象代表了"模型"部分,而Apex则代表了 ...

  7. loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取Part 2

    脚本开发-参数化之将内容保存为参数.参数数组及参数值获取 by:授客 QQ:1033553122 ----------------接 Part 1--------------- 把内容保存到参数数组 ...

  8. Java:[面向对象:继承,多态]

    本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类( ...

  9. python爬虫之pyquery学习

    相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再选取 元素的文本.属性等内容的获取 pyquery执行DOM操作.css ...

  10. 利用朴素贝叶斯分类算法对搜狐新闻进行分类(python)

    数据来源  https://www.sogou.com/labs/resource/cs.php介绍:来自搜狐新闻2012年6月—7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL ...