小明明今天搬家,家中只有5件值钱玩意,重量分别为2斤、1斤、3斤、2斤、4斤,价值分别为12元、10元、20元、15元、14元。即化成重量数组为:W{2,1,3,2,4}和价值数组为:V{12,10,20,15,14}。家里祖传的破三轮只能一次载6斤东西,问:小明明怎样安排值钱玩意的装载,才能使第一次装载就收获最大价值,求出最大价值?
方法一:使用二维数组建立动态方程。
代码如下:
算法主要思想分析:该算法主要采用的是动态规划思想。
对于关键代码:
即先把数组下标较大的那个玩意不予考虑,直接将上一次的最优结果赋予这次,然后用max函数来比较考虑数组下标较大的玩意与上一次的最优结果,取其之间的最大值。
结果图:
右下角45即为结果。
通俗的理解:首先把dp[3][6]赋予dp[4][6]=45,这是不考虑把5号玩意(对应数组下标为4)装上破三轮的情况。接下来考虑把5号玩意装上,因为5号玩意重4斤价值为14元,则破三轮还能再装2斤,就找对应数字为2的那一列的
最大值为15,又因为14+15=29<45,即结果为45元。
方法二:使用一维数组建立动态方程。
代码如下:
关键代码:
即用for循环来一行行更新最优解。最后返回dp[c]即dp[6]=45为最终答案。
综上所述:最好自己按照代码画出表格,一步一步来体验小明明的搬家乐趣。