1. 程式人生 > 其它 >簡單的sql語法學習

簡單的sql語法學習

/**
 * 揹包問題
 * 有n件物品和一個最大承重為W的揹包,每件物品的重量是w[i],價值是v[i],
 * 在保證總重量不超過 W 的前提下,選擇某些物品裝入揹包,揹包的最大總價值是多少?
 * 注意:每個物品只有一件,也就是每個物品只能選擇 0 件或者 1 件
 */
public class Bag {
    public static int maxValue(int[] values, int[] weights, int max) {
        if (values == null || values.length == 0) {
            return 0;
        }
        if (weights == null || weights.length == 0) {
            return 0;
        }
        if (max <= 0) {
            return 0;
        }
        int dp[][] = new int[values.length + 1][max + 1];
        for (int i = 1; i <= values.length; i++) {
            for (int j = 1; j <= max; j++) {
                // 選中的物品重量
                int selectWeight = weights[i - 1];
                // 如果選擇的物品的重量超過最大承重
                if (selectWeight > j) {
                    // 最大的價值 = 上一輪的最大價值(不選擇該物品)
                    dp[i][j] = dp[i - 1][j];
                } else {
                    // 選擇該物品
                    dp[i][j] = Math.max(dp[i - 1][j], values[i - 1] + dp[i - 1][weights[i - 1]]);
                }
            }
        }
        return dp[values.length][max];
    }

    public static void main(String[] args) {
        int[] values = {6, 3, 5, 4, 6};
        int[] weights = {2, 2, 6, 5, 4};
        int max = 10;
        System.out.println(maxValue(values, weights, max));
    }
}