练习1-P2672
贪心策略证明:
总疲劳值=选取的住户疲劳值之和+最远端路程疲劳值
按住户疲劳值排序,选前X的住户得到方案I
由最远端路程疲劳值的单调性知:最远端位置小于I的最远位置对应方案总疲劳值小于I的总疲劳值
那么疲劳值最大的选法,其最远端位置必然大于等于I的最远端位置。对于最远端位置大于I的选法,剩余的X-1个待选位置需最大化,即取住户疲劳值前X-1项,此时这些选法前X-1项固定,只需最后一项最大化,取
$$max(s[i]+2*d[i])$$最后只需比较该取法和方案I,取疲劳值大的那个即可
PS:自然语言还是太啰嗦了,下次尝试用符号来刻画
上面最大化对应集合表述应是:
$$max\{S\}=max\{A \cap B\}=max\{A \cap \{max\{B\}\}\}$$,即将子部分最大而化简整个方案集合(给这种靠感觉的变化打个正确性补丁)
为什么想了很久:
在简化,抽象化的过程中,抛弃了题目的特殊性,导致方向错误
N种数列:$\{a_{i,n}\},1\le i \le N$ 不可能在$O(nlogn)$内求出
$$max\{\ \sum_{1\le i_1 \le ...i_N \le len} a_{sub \_ index(i),i_1} \}$$这题的特殊性在于附加权的单调性,而不是数列的重复
启发:
- 注意思维的跳跃性,深搜,碰壁,返回所需的时间太久了
- 跳跃性的转换思维,广搜,才容易迅速找到正解