Java 数据结构 - 背包问题
以下是使用动态规划技术在 Java 中解决背包问题的方案。
示例
public class KnapsackExample { static int max(int a, int b) { return (a > b)? a : b; } public static int knapSack(int capacity, int[] items, int[] values, int numOfItems ) { int i, w; int [][]K = new int[numOfItems+1][capacity+1]; // Build table K[][] in bottom up manner for (i = 0; i <= numOfItems; i++) { for (w = 0; w <= capacity; w++) { if (i==0 || w==0) { K[i][w] = 0; } else if (items[i-1] <= w) { K[i][w] = max(values[i-1] + K[i-1][w-items[i-1]], K[i-1][w]); } else { K[i][w] = K[i-1][w]; } } } return K[numOfItems][capacity]; } public static void main(String args[]) { int[] items = {12, 45, 67, 90, 45}; int numOfItems = items.length; int capacity = 100; int[] values = {1200, 4500, 6700, 9000, 4500}; int x = knapSack(capacity, items, values, numOfItems ); System.out.println(x); } }
输出
9000
广告