Least Cost Bracket Sequence Codeforces 3D 贪心(说得轻巧)

本文介绍了一种通过调整括号序列使其既合法又保持最小权值的算法。该方法首先将所有不确定的括号设为右括号,然后从前向后扫描并修正非法状态,确保每次修正都是最少量的变化。

题意我简单说,就是要你添加'('和')'使得满足合法性和权值最小性。

大概看了下别人的题解,真是。。。基本都写得差不多,然而写的好的暂时没看到。

其它题解大致就是先维持合法性再修改权值最小性,先将所有'?‘改为')',再从前往后遍历,如遇非法修改前面')'为'('在最优情况下。

嗯,从解题方案来说已经基本正解了,但是有一个漏掉的地方,就是在修改非法时的要修改到什么程度都不讲也不解释。这点极其重要,为何呢?因为我们要保证我们在实行策略时保证修改前面的'('全为非法行为。怎么保证,遇非法状态修改到恰好合法即可,为什么这样就保证了呢?首先,我们在可修改处在合法状态总是放')',如果某个可修改位置为'(',那么说明我们是为了保证前面某个子状态正好合法才放的,那么我们怎么可能舍得修改它呢(||-_-)。为什么要这样保证呢?事实上左括号和右括号的数目总是相同的,所以我们修改为合法时没必要多修改,首先若必须修改,后面的决策迟早会修改,且也不影响后面的决策。

代码我就不贴了,堆维护即可。

写个感想吧,这种贪心题老实说时第一次遇到,给人的感觉就是两个字,难想(除非你已熟练掌握)。以前一直以为贪心在某步的决策是最优,并不影响后面的决策。但这题告诉了我们不一定是这样,后面的决策可以反水(改变前面的决策)。其实这种思想也在容斥中体现了。不过,这种思想的特点总是体现出来了的,当前的决策总是为了未来能变得更美好(:

转载于:https://www.cnblogs.com/UtopioSPH001/p/7664303.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值