码迷,mamicode.com
首页 > 其他好文 > 详细

0-1背包问题

时间:2020-07-23 22:57:27      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:blog   import   tps   cap   htm   port   oid   ret   就是   

问题描述:
现有n件物品和一个容量为c的背包。第i件物品的重量是重量为w[i],价值是v[i]。已知对于一件物品必须选择取(用1表示)或者不取(用0表示),且每件物品只能被取一次(这就是“0-1”的含义)。求放置哪些物品进背包,可使这些物品的重量总和不超过背包容量,且价值总和最大。

代码:

import java.util.Scanner;

/**

  • author:wangxue
  • date:2020/7/23
    */
    // 0-1 背包问题
    // https://www.cnblogs.com/skying555/p/11119488.html
    public class Solution1 {
    public static int zeroAndOneBag(int[] weights,int[] values,int capacity){
    int[][] dp=new int[weights.length+1][capacity+1];
    for(int i=1;i<dp.length;i++){
    for(int j=1;j<dp[0].length;j++){
    if(j>=weights[i-1]) {
    dp[i][j] = Math.max(values[i-1]+dp[i-1][j-weights[i-1]],dp[i-1][j]);
    }else{
    dp[i][j]=dp[i-1][j];
    }
    }
    }
    return dp[weights.length][capacity];
    }
    public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    int capacity=scanner.nextInt();
    int goods=scanner.nextInt();
    int[] weights=new int[goods];
    int[] values=new int[goods];
    for(int i=0;i<goods;i++){
    weights[i]=scanner.nextInt();
    values[i]=scanner.nextInt();
    }
    System.out.println(zeroAndOneBag(weights,values,capacity));
    }
    }

0-1背包问题

标签:blog   import   tps   cap   htm   port   oid   ret   就是   

原文地址:https://blog.51cto.com/14232274/2512830

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!