关于堆的题解们都把做法讲的很详细了,但关于这种做法的正确性这一块我一直无法说服自己。于是尝试自己证明。
用01串表示各数的拿取情况,将01010这样的以零开头和结尾的子串括起来表示一个分量。现假设拿了i-1个后的最优情况如下
(010)00(01010)0(010)00(0101)
但凡拿了i个后的最优拿取情况中,原来括号没括中的位置出现了1,那剩下的内容直接照搬i-1的拿取情况就行了,如果不照搬就可能会导致不最优。
这时可能的其他最优解就局限于把i-1方案某一个分量0、1置换的情况(给出样例中最后一个分量有点特殊,应该是不可能置换最后一个的,所以可以忽略他),可以发现以上两种i方案的可能情形,堆做法都能照顾到。
如此证明是否合理?求指教。