zoukankan      html  css  js  c++  java
  • 01背包问题

    问题描述:

    有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
    
    第 i 件物品的体积是 vi,价值是 wi。
    
    求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
    输出最大价值。
    
    输入格式
    第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
    
    接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。
    
    输出格式
    输出一个整数,表示最大价值。
    
    数据范围
    0<N,V≤1000
    0<vi,wi≤1000
    输入样例
    4 5
    1 2
    2 4
    3 4
    4 5
    输出样例:
    8

    解法思路:

    /*朴素解法*/
    /*使用dp来做*/
    import
    java.util.*; public class Main{ private static Scanner sc=new Scanner(System.in); public static void main(String[] args){ int N=sc.nextInt();//物件个数 int V=sc.nextInt();//背包容量 int[] v=new int[N+1];//物件体积 int[] w=new int[N+1];//物件质量 for(int i=1;i<N+1;i++){ v[i]=sc.nextInt(); w[i]=sc.nextInt(); } /****运行代码****/ int[][] dp=new int[N+1][V+1];//定义状态转移数组 for(int i=1;i<N+1;i++){ for(int j=0;j<V+1;j++){ if(j>=v[i]){ dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]); }else{ dp[i][j]=dp[i-1][j]; } } } System.out.println(dp[N][V]); } }

    优化思路:

    /*滚动数组*/
    import java.util.*;
    public class Main{
        private static Scanner sc;
        public static void main(String[] args){
            sc=new Scanner(System.in);
            int N=sc.nextInt();
            int M=sc.nextInt();
            int[] w=new int[N+1];
            int[] v=new int[N+1];
            for(int i=1;i<N+1;i++){
            v[i]=sc.nextInt();//输入位置
            w[i]=sc.nextInt();
            }
            int[] dp=new int[M+1];
            for(int i=1;i<N+1;i++){
                for(int j=M;j>=v[i];j--){
                        dp[j]=Math.max(dp[j],dp[j-v[i]]+w[i]);//去掉以后分析
                    }
                }
                System.out.println(dp[M]);
            }
            
        }

    户枢不蠹,流水不腐

  • 相关阅读:
    [BJOI2019] 光线
    C# 从零开始写 SharpDx 应用 笔刷
    BAT 脚本判断当前系统是 x86 还是 x64 系统
    BAT 脚本判断当前系统是 x86 还是 x64 系统
    win2d 通过 CanvasActiveLayer 画出透明度和裁剪
    win2d 通过 CanvasActiveLayer 画出透明度和裁剪
    PowerShell 拿到显卡信息
    PowerShell 拿到显卡信息
    win10 uwp 如何使用DataTemplate
    win10 uwp 如何使用DataTemplate
  • 原文地址:https://www.cnblogs.com/yunianzeng/p/13041421.html
Copyright © 2011-2022 走看看