1026

发布时间 2023-10-26 11:09:58作者: FxorG

10/26

https://codeforces.com/problemset/problem/855/E

做出来了!

需要注意的是,数位 dp 时若 lim 和 zero 都为 0 了,那么后面的转移这两个都不会有限制,也就是后面的转移都是顶满的,也就是说,后面的转移不受你一开始给的数的限制,这是可以记忆化的。

https://codeforces.com/problemset/problem/1244/G

没做出来。

考虑如果把 n,n,n-1,n-1,n-2,n-2,...,2,2,1,1 抽象成一个序列。那么对于一个数,如果其有贡献的话,那么就要求其后面有一个能和他“匹配”。那么这种匹配关系,你应该是要想到括号的,也就是说,既然每个有贡献位置都能够有匹配,那么最后的序列应该是一个合法的括号序列,并且贡献的值就是左括号对应的权值和。那么问题就变成了,你要如何使得这个左括号的权值尽可能大。

考虑我们有一个限制,就是括号序列的合法性。而括号序列的合法性,有一个抽象手段就是,对于所有前缀,都要满足左括号数量>=右括号数量,并且整个序列左右括号数量相等。

那么,你应该去思考,我们要把左括号尽可能提前,并且使得括号序列合法,这样才能使得权值尽可能大。如果我们把前面的一个右括号,和后面的左括号,进行一个交换,那么根据我们这个判定,实际上是一定合法的!因为相当于你在更前的地方后缀 +1 了,而在更后的地方后缀 -1 了。显然这个 +1 影响的范围要更大一些。因此,是一定合法的。而有可能是把前面的左括号,和后面的左括号进行交换吗?因为这是唯二的提前左括号的手段。很显然,如果我们交换了,这对权值是无影响的。

因此,上面这一步的考虑实际上是基于“提前左括号”这个想法出发的。

那么,问题就变成了,如何通过这个操作,使得权值尽可能大。

那么,这个问题,你发现能做 dp 吗?好像是比较困难的!所以你去猜测能不能直接贪心!发现好像直接从前往后贪过去是对的。

https://codeforces.com/problemset/problem/1497/D

没做出来。

这题为什么做不出来?

  1. 思考方向大体是对的,想到了若将 (i,j) 这样的点对抽象成图,那么会是个 DAG,这时候变成最长路问题,那你直接拓扑是 \(O(n^3)\) 的。

  2. 你应该注意到,这个转移的边权是单增的!因此你要去考虑,能不能边权从小到大排序,进行转移,我认为这是一个显然想法。

https://codeforces.com/problemset/problem/377/D

没做出来。

考虑选出来一个集合 S,那么其能力限制是交的,这个限制是很紧的。

那么你一定要求每个人的能力都在这个交集当中。

考虑去用量刻画这个东西。

便是,\(\forall v,v\in[l,r]\),那么考虑对这个 v 放宽,你会发现实际上只有其最小,跟最大是紧的。

因此量化出来。

\(\max l\le \min v\le \max v\le \min r\)

考虑 \(\max l\le \min v\) 这个柿子,就是考虑你把 \([l_i,v_i]\) 看成线段,然后有交,那么两个维度和一起,便是二维平面上看成矩形,然后有交。