AtCoder刷题记录

神仙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

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

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

猜你喜欢

转载自www.cnblogs.com/p-b-p-b/p/10834641.html
今日推荐