反悔问题
贪心不能反悔,因为贪心是全局最优解。
但是我们可以在贪心的条件上加上反悔的操作。
如果这一步的贪心不是最优解,我们就退回去一步,重新换一种贪心策略。
反悔自动机
设计一种反悔策略,使得随便一种贪心策略都可以得到正解。
基本的设计思路是:每次选择直观上最接近全局最优解的贪心策略,若发现最优解不对,就想办法自动支持反悔策略。
CF865D Buy Low Sell High
已知接下来N天的股票价格,每天你可以买进一股股票,卖出一股股票,或者什么也不做.N天之后你拥有的股票应为0,当然,希望这N天内能够赚足够多的钱。
分析:
这是一个非常经典、实用的问题。我们要考虑的是挑哪个时间段销售股票的权值最大,同时在这个区间内有三种操作。
我们可以想到一种策略:我们可以买入最低价格的股票,然后在可以赚钱的天数卖出去。
但是上述肯定是错误的。这样可以保证赚钱,但是无法保证赚的钱最多。
我们考虑设计一种反悔策略,使所有的贪心情况都可以得到全局最优解。
设 S B u y S_{Buy} SBuy为全局最优解中买入当天的价格, S S e l l S_{Sell} SSell为全局最优解中卖出当天的股票的价格, S i S_i Si为第 i i i天的股票价格
则可以列出式子: S s e l l − S b u y = (