01背包问题-Java

/**
 * 01背包问题
 * 第一行输入两个整数m,n,背包重量为m,物品数量为n
 * 然后输入n行,分别输入物品的重量w、一个空格和物品价值v
 * <p>
 * 要求输出背包能装的最大价值
 * <p>
 * 示例
 * <p>
 * 输入:
 * 10 4
 * 2 1
 * 3 3
 * 4 5
 * 7 9
 * <p>
 * 输出:
 * 12
 */

import java.util.Scanner;

public class Main15 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[][] dp = new int[50][300];
        int[] w = new int[50];
        int[] v = new int[50];
        int m = 0;
        int n = 0;
        m = sc.nextInt();
        n = sc.nextInt();
        for (int i = 1; i <= n; i++) {
            w[i] = sc.nextInt();
            v[i] = sc.nextInt();
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (j < w[i]) {
                    dp[i][j] = dp[i - 1][j];
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
                }
            }
        }
        System.out.println(dp[n][m]);
        //将dp数组打印出来
//        for (int i = 0; i <= n; i++) {
//            for (int j = 0; j <= m; j++) {
//                System.out.print(dp[i][j]+" ");
//            }
//                System.out.println();
//        }
    }
}
posted @ 2021-03-09 20:00  笨鸟贤妃  阅读(62)  评论(0)    收藏  举报