Peng Lv

毋意,毋必,毋固,毋我。 言必行,行必果。

导航

[DP]一道动态规划——理想收入问题

上午在图书管从吴文虎教授的那本ACM/ICPC高级教程上看了一道题,虽说不上经典,但其中的思想还是可以借鉴的。

题意:以一元为本金,能获得的最大收入,第i天股票价格为v[i],1<=i<=m

思路:

  (1)DP思路明显,直接进行动态规划,令f[i]代表第i天所获得的最大收入.那么有公式:

    f[i] = max{f[i-1],f[j]*v[i]/v[j]} (1<=j<i)

其中f[i-1]代表不在第i天卖掉股票,f[j]*v[i]/v[j]代表从第j天买进,第i天卖出的情况,显然,以上情况便包括了所有的情形。分析可知,此算法的时间复杂度为O(n*n),空间复杂度为O(n).

  (2)经过分析可以发现,公式f[j]*v[i]/v[j]中对于确定的i,v[i]是不变的,所以我们只需要找到f[j]/v[j]的最大值即可,进而可以发现,对于每次i循环,找到最大的f[j]/v[j]仅仅需要O(1)的复杂度,为什么呢?因为j的范围是[1,i-1],而f[j]/v[j]是不变的,所以每次循环结束我们只需要记录下f[j]/v[j] (1<= j < i)的最大值即可,这样我们便消除了j的循环操作,时间复杂度降为O(n),又因为可以边输入,边处理,所以空间复杂度降为O(1).

总结:

  至此,此题通过分析,时间复杂度降为O(n),空间复杂度降为O(1),问题得到比较好的解决,不仅是本题,很多DP问题通过分析,我们都可以利用一些变量的关系来简化公式,或者降低时空复杂度,有时候转化一下思想也能达到同样效果,这就要就我们对一个问题做比较深入的分析,多思考,多总结,打破常规,才能得到进步!

posted on 2010-09-17 18:01  Lvpengms  阅读(1029)  评论(0编辑  收藏  举报