首页 > 其他 > 详细

AtCoder刷题记录

时间:2019-05-08 21:25:31      阅读:233      评论:0      收藏:0      [点我收藏+]

神仙AtCoder思维量巨大,很适合我用来提高智商qwq

ARC066C Addition and Subtraction Hard

首先要发现两个性质。

加号右边不会有括号

显然,有括号也可以被删去。

\(op_i\)\(A_{i+1}\)之间只会有一个括号

有多个括号的话只保留最外边那个,显然答案不变。

然后就可以定义状态:\(dp_{i,j}\)表示前\(i\)个数,还有\(j\)个未闭合的左括号,得到的最大答案。

由于只有减号右边有括号,所以只要知道左边有几个未闭合的左括号,就可以知道自己的贡献是\(1\)还是\(-1\),所以转移也很容易了。

然而状态是\(O(n^2)\)的,不怎么行。

然而还可以发现一个性质:嵌套的括号不超过两层。超过两层的可以通过调整顺序消去一多余的。

那么就做完了。

AGC033C Removing Coins

首先可以发现,每次操作就相当于两种选择:要么删掉所有叶子,要么留下一个叶子删掉剩下的。

然后再可以发现:每次操作可以选择把树的直径减少\(1\)\(2\)

那么求出树的直径之后就变成了一个简单的取石子游戏了。

AGC014D Black and White Tree

从叶子开始考虑。如果白点点了叶子的父亲,那么黑点就必须点掉这个叶子,然后这两个点就对后面没有影响了,可以删掉。

冷静思考一番,发现只要一直这样删删删,看最后有没有点剩下来就好了。

AtCoder刷题记录

原文:https://www.cnblogs.com/p-b-p-b/p/10834641.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!