D1T1 (5274)
对于区间 ([l,r]) 上的一次操作,只可能有两种情况。
- 割 ([l,r]) ,高度为当前最小值。贪心证明。
- 最小值所在位置分 ([l,r]) 为两个区间,对其中一个区间操作。子区间也可能再次被分割,需要递归处理。
(由于操作次数限制,策略需要进行“一定程度的贪心”,不总是第一种情况。)
设 (f[i][j][k]) 表示区间 ([i,j]) 割 (k) 次的最大收益。上述讨论说明转移无需枚举中间点,只要按最小值拆为两个区间并递归转移。
D2T1 (5277)
所有合法路径经过的格子是一个连通块,分别从左上和右下BFS可以求出。连通块的左下边界和右上边界是两条“临界路径”,如果它们在某一格相交,说明这里是必经之路,只要占据就必定不存在合法路径。这是第一类。
还存在另一种可能。此时,两个格子一定会分别占据两条“临界路径”(反证法证明)。不妨设占据左下路径,使它不合法,产生一条新的“临界路径”。若新路径与右上路径产生交点,将其封锁。
考虑如何求出新的临界路径。
按照 (x+y) 将 (a[x][y]) 分层。占据 (a[x][y]) 时,在 (x+y) 层,新路径必须找到一个新点经过。这个点应尽量偏左下,并且在连通块内,可以暴力求出。
现在已经确定新路径的一个点,以这个点按照求左下路径的策略拓展,就是新的临界路径。当有一点与之前的路径相同时,之后的路径都相同,不产生贡献,可以退出。