首先让我们证明一个结论:存在一个最优解小Z只引出了一个话题
感性理解:我多选了一个相当与把两个答案进行某种意义下的平均,不会变的更优
证明:
若$S_1$表示小Z引出话题的集合,我们只要证明向$S_1$中插入集合$S_2$不会变的更优($S1\cap S_2=\emptyset$)(新方案要么不优于只选$S_1$的方案,要么不优于只选$S_2$的方案)
设当只选$S_1$时,答案为$ans_1$,$sum(k)=a_k$,
当只选$S_2$时,答案为$ans_2$,$sum(k)=b_k$(令$ans_1\leq ans_2$)
当选$S_1\cup S_2$时,答案为$ans_3$,$sum(k)=c_k$
显然$c_1=a_1+b_1$
任意$k\in [2,n] a_k\leq a_1*ans_1$
任意$k\in [2,n] b_k\leq b_1*ans_2$
任意$k \in [2,n] c_k \leq a_k+b_k\leq a_1\times ans_1+b_1\times ans_2$
(话题可能有交集)
证毕
所以只要枚举选的点,然后算答案即可(我的代码实现求了个传递闭包)
Talk is cheap, show me the code.
码风丑,请大佬轻喷
1 |
|