注意1,把条件判断转换成min或max
注意2,如果没有递推递归,那就是贪心了。贪心不回溯,never reconsider its choice.
这道题最开始想的其实是贪心,如果num[i-1]*a[i]<10*a[i-1]那么就把i-1用i买,把数目加到i上num[i] += num[i-1]
这不是DP,而是贪心,实际上贪心是不对的。因为i-1加到i,然后如果i再加到i+1,实际上做了i-1加到i+1的过程,那就不一定num[i-1]*a[i+1]<10*a[i-1]了。
局部最优解没法保证全局最优解,没有reconsider its choice。
同时在想这个贪心的时候想到了只能是i-1加到i上,不能i-1加到i+1上,不能跳着加,那样肯定不是最有的。因为i+1的价格比i高
其实想到了贪心,那么扩展一下,并且把条件判断替换成min在这里。
那么就是加入一个递推过程,d[i] = min{d[j] + (sum(i) - sum(j) + 10)*a[i]} 0<= j <i
就是递推了,就是遍历减少重复计算。
sum(i)是前i个数量和