《编程之美》1.4节。
动态规划函数式:
(当Y1=Y1=Y3=Y4=Y5=0)时 F(Y1,Y2,Y3,Y4,Y5)=0
F(Y1,Y2,Y3,Y4,Y5) = min{
5*8*(1-0.25) +F(Y1-1,Y2-1,Y3-1,Y4-1,Y5-1) (Y5>0)
4*8*(1-0.20)+F(Y1-1,Y2-1,Y3-1,Y4-1,Y5) (Y4>0)
3*8*(1-0.10)+F(Y1-1,Y2-1,Y3-1,Y4,Y5) (Y3>0)
2*8*(1-0.05)+F(Y1-1,Y2-1,Y3,Y4,Y5) (Y2>0)
F(Y1-1,Y2,Y3,Y4,Y5) (Y1>0)
}
空间和时间复杂度都为O(Y1*Y2*Y3*Y4*Y5)
此题一看到动态规划函数式,发现不难。但是做过动态规划的同学们,都知道在空间复杂度为O(X*Y)的时候 用到二维数组,0-1背包问题就是。
但是这个空间复杂度初一看上去,特么的,这是什么?5维数组?呵呵哒。
所以此题我用了一个较为巧妙的方法,不是动态规划的自底向上,是自顶向下备忘录法。
备忘录是用HashMap做的。
key为String "Y1-Y2-Y3-Y4-Y5";
个人认为较为巧妙,如果有更好的数据结构,欢迎吊打我。
动态规划函数式:
(当Y1=Y1=Y3=Y4=Y5=0)时 F(Y1,Y2,Y3,Y4,Y5)=0
F(Y1,Y2,Y3,Y4,Y5) = min{
5*8*(1-0.25) +F(Y1-1,Y2-1,Y3-1,Y4-1,Y5-1) (Y5>0)
4*8*(1-0.20)+F(Y1-1,Y2-1,Y3-1,Y4-1,Y5) (Y4>0)
3*8*(1-0.10)+F(Y1-1,Y2-1,Y3-1,Y4,Y5) (Y3>0)
2*8*(1-0.05)+F(Y1-1,Y2-1,Y3,Y4,Y5) (Y2>0)
F(Y1-1,Y2,Y3,Y4,Y5) (Y1>0)
}
空间和时间复杂度都为O(Y1*Y2*Y3*Y4*Y5)
此题一看到动态规划函数式,发现不难。但是做过动态规划的同学们,都知道在空间复杂度为O(X*Y)的时候 用到二维数组,0-1背包问题就是。
但是这个空间复杂度初一看上去,特么的,这是什么?5维数组?呵呵哒。
所以此题我用了一个较为巧妙的方法,不是动态规划的自底向上,是自顶向下备忘录法。
备忘录是用HashMap做的。
key为String "Y1-Y2-Y3-Y4-Y5";
个人认为较为巧妙,如果有更好的数据结构,欢迎吊打我。