一种奇怪的思路(求证伪)
查看原帖
一种奇怪的思路(求证伪)
319995
THUD楼主2024/10/26 22:08

不知道对不对,大样例过了,即使错了也可能能骗点分
先读入时将多个相邻的同一个数压成一个并统计这些重复数的答案,且预处理出 pre[i]pre[i]ii 左侧离 ii 最近的和 ii 相同的数的下标。
令dp数组 f[i]f[i] 表示强制让第 ii 个数满足要求被选,由于第一步已经去重所以区间 (pre[i],i)(pre[i],i) 内的异色不存在可互相匹配的情况,然后发现有3种转移:
1.由 f[1...pre[i]1]f[1...pre[i]-1] 转移而来,可以理解为直接拼上去。
2.由 f[pre[i]]f[pre[i]] 转移而来,此时 ii 应取同色。
3.由 f[pre[i]+1]f[pre[i]+1] 转移而来,此时对应 pre[i]pre[i] 被横跨的情况(也只有这一种了,横跨的右端点只能是 pre[i]+1pre[i]+1),ii 应取异色。
将三种情况合起来发现 f[i]f[i] 是直接由 f[1...pre[i]+1]f[1...pre[i]+1] 转移过来,然后记个 ff 的前缀最大值即可优化至线性复杂度。即最后的转移式: f[i]=premax[pre[i]+1]+a[i]f[i]=premax[pre[i]+1]+a[i] 答案即为 premax[n]+totpremax[n]+tottottot 为之前算相邻重复数字时统计的贡献值)。
有可能有些没考虑到的情况或是多算的情况,因本人能力有限无法举出,希望各位大佬能够指正。
当时考场T2耗太久了于是随便乱糊的思路没想到过大样例了,当时我写的T3代码还不到T2一半,没写对拍反正即使拍出来发现自己错了也想不出正解

2024/10/26 22:08
加载中...