生活随笔
收集整理的這篇文章主要介紹了
算法 - 动态规划(0-1背包问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
推出公式:
第三個就是:讓上一次的和(新加入商品容量+(總空間-新加入的商品容量)也就是剩余空間的最大值,剩余空間的最大值去上一層找)
package Algorithm
.dac
.knapsack
;public class KnapsackProblem {public static void main(String
[]args
){int [] weight
= {1, 4, 3};int [] value
= {1500, 3000, 2000};int m
= 4; int n
= value
.length
; int [] [] v
= new int[n
+1][m
+1];int [] [] path
= new int[n
+1][m
+1];for (int i
= 0; i
< v
.length
; i
++) {v
[i
][0] = 0; }for (int i
= 0; i
< v
[0].length
; i
++) {v
[0][i
] = 0;}for (int i
= 1; i
< v
.length
; i
++) {for (int j
= 1; j
< v
[0].length
; j
++) {if (weight
[i
-1] > j
){v
[i
][j
] = v
[i
-1][j
];}else {if (v
[i
-1][j
] < value
[i
-1] + v
[i
-1][j
-weight
[i
-1]]){v
[i
][j
] = value
[i
-1] + v
[i
-1][j
-weight
[i
-1]];path
[i
][j
] = 1;}else {v
[i
][j
] = v
[i
-1][j
];}}}}for (int i
= 0; i
< v
.length
; i
++) {for (int j
= 0; j
< v
[0].length
; j
++) {System
.out
.print(v
[i
][j
]+" ");}System
.out
.println();}System
.out
.println("===========");int i
= path
.length
- 1;int j
= path
[0].length
- 1;while (i
> 0 && j
> 0){if (path
[i
][j
] == 1) {System
.out
.println("物品:" + i
+ "加入背包");j
= j
- weight
[i
- 1];}i
= i
- 1;}}
}
總結
以上是生活随笔為你收集整理的算法 - 动态规划(0-1背包问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。