关于今天T2的我要说的可反悔贪心是个什么东西
首先,为什么跑不了费用流:因为无法保证在一次更新中退流和进流中一个位置只出现一次
其次,这肯定不是正解,得依赖特判,部分情况可能最后会出现因为不断特判导致复杂度假掉(目前看来没有),同理,显然正常的费用流没法边跑边特判
然而,可以保证,可能出现的“增广”(暂且叫做增广)只有十种情况
证明:设 \(a_i\) 表示有 \(i\) 个位置长度退了 \(i\),\(b_i\) 反之
则一个方案不重复的前提是数组 \(a\) 和 \(b\) 分别做背包可达值没有重复的
否则把这部分分别去掉,又是一种合法方案,不管这部分贡献是正是负在更前的时候都会处理
所以这个思想再推广一下就是分段了
打表得到只有十种情况,下面每一组第一行表示标号,第二行是 \(a_i\),第三行是 \(b_i\)
表
1
0000
1000
2
0002
0030
3
0010
0001
4
0010
0200
5
0100
0010
6
1000
0100
7
1001
0020
8
1100
0001
9
2000
0010
10
3000
0001
但是说实话这个表对正解的启发性还是趋近于 \(0\) 的
而每个位置可进退之和不大于 \(4\) ,所以表 \(1,2,3,4,5,10\) 都是不需要特判的,表 \(6,7,8,9\) 的特判也不会影响复杂度
代码有时间我再实现,实现了TLEcoders估计也过不了
我上去说的时候没准备好,也没解释清楚为什么费用流无法建模,主要是没先说明这个方法大概是错的,我只是想说明它只有十种可能
所以下次能不能让我先说完,先别过了再说和费用流无法实现行不行
维生素B