题意:
给定两个数组 a i ≤ 100 , ∣ b i ∣ ≤ 1 e 5 a_i \le 100 \ , \ |b_i|\le1e5 ai≤100 , ∣bi∣≤1e5,且 n ≤ 3000 n\le 3000 n≤3000
你需要从 a i a_i ai中选出一些数字组成集合 S S S,并且对于每个选中的 a i a_i ai,你需要付出对应的 b i b_i bi的代价。
集合需要满足:对于集合中的任意一个数字,在数列 a a a中,出现在它左边的所有的他的约数都必须出现在集合中。
求最大代价。
LS的人类迷惑行为:
由于约数限制,对于同一个值,如果选择了,那么就一定是选择了该值的一段前缀,对于所有的值的cost做前缀和,将“选这个数”转化为“选这个数字的一段前缀”。对于每个数字拉出一个长条,限制为“选择了第一条的某个点,就一定要选择另外几条的某个后缀中的一个”,转化为经典建图,负权用对于流量加大数来处理。
卢老爷:
这不是最大权闭合子图吗。有了上面那个性质之后,正的连源点负的连汇点,限制连lastpos。卢老爷NB!
顺带一提这场的E很妙,ghj的+min-max转+1-1中的min妙不可言。ghjNB!
另外表示这场的C我们三个人都不会。幸亏没打.jpg