背包算法

来源:互联网 发布:移动网络电视哪些付费 编辑:程序博客网 时间:2024/06/07 00:54
public class PackageProblem {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int totalTime = scanner.nextInt();        int amount = scanner.nextInt();        int[] time = new int[amount];        int[] value = new int[amount];        for (int i = 0; i < amount; i++) {            time[i] = scanner.nextInt();            value[i] = scanner.nextInt();        }        int[][] arr = new int[amount+1][totalTime+1];        for (int j = 0; j <= totalTime; j++){            for (int i = 0; i <= amount; i++){                if(i == 0 || j==0){                    arr[i][j] = 0;                }else{                  if(time[i-1] > j){                      arr[i][j] = arr[i-1][j];                  }else{                      arr[i][j] = Math.max(arr[i-1][j], value[i-1] + arr[i-1][j-time[i-1]]);                  }                }            }        }        System.out.println(arr[amount][totalTime]);        scanner.close();    }}

思路:动态规划,背包能装的重量从1开始慢慢增加,每个重量下装的物品,一件一件往里放。每次选取最优价值。

0 0
原创粉丝点击