有 NN 种物品和一个容量是 VV 的背包,每种物品都有无限件可用。

第 ii 种物品的体积是 vivi,价值是 wiwi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。

输入格式

第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。

接下来有 NN 行,每行两个整数 vi,wivi,wi,用空格隔开,分别表示第 ii 种物品的体积和价值。

输出格式

输出一个整数,表示最大价值。

数据范围

0<N,V≤10000<N,V≤1000
0<vi,wi≤10000<vi,wi≤1000

输入样例

4 5
1 2
2 4
3 4
4 5

输出样例:

10

思路:

完全背包:
     

朴素写法:

import java.util.Scanner;public class Main {static final int max=1005;static int n,m;static int dp[][]=new int[max][max];static int v[]=new int[max];static int w[]=new int[max];public static void main(String[] args) {Scanner scan=new Scanner(System.in);n=scan.nextInt();m=scan.nextInt();for(int i=1;i<=n;i++){v[i]=scan.nextInt();w[i]=scan.nextInt();}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){dp[i][j]=dp[i-1][j];for(int k=0;k*v[i]<=j;k++)dp[i][j]=Math.max(dp[i][j], dp[i-1][j-k*v[i]]+k*w[i]);}System.out.println(dp[n][m]);}
}

 优化:  三层循环变两层循环

代码:

import java.util.Scanner;public class Main {static final int max=1005;static int n,m;static int dp[][]=new int[max][max];static int v[]=new int[max];static int w[]=new int[max];public static void main(String[] args) {Scanner scan=new Scanner(System.in);n=scan.nextInt();m=scan.nextInt();for(int i=1;i<=n;i++){v[i]=scan.nextInt();w[i]=scan.nextInt();}for(int i=1;i<=n;i++)for(int j=0;j<=m;j++){dp[i][j]=dp[i-1][j];if(v[i]<=j) dp[i][j]=Math.max(dp[i][j], dp[i][j-v[i]]+w[i]);}System.out.println(dp[n][m]);}
}

再进一步优化: 二维变一维

import java.util.Scanner;public class Main {static final int max=1005;static int n,m;static int dp[]=new int[max];static int v[]=new int[max];static int w[]=new int[max];public static void main(String[] args) {Scanner scan=new Scanner(System.in);n=scan.nextInt();m=scan.nextInt();for(int i=1;i<=n;i++){v[i]=scan.nextInt();w[i]=scan.nextInt();}for(int i=1;i<=n;i++)for(int j=v[i];j<=m;j++){dp[j]=Math.max(dp[j], dp[j-v[i]]+w[i]);}System.out.println(dp[m]);}
}

完全背包问题(模板)相关推荐

  1. ACM模板 | 背包问题模板总结

    背包问题 模板 01 背包问题 一维数组(滚动数组)模板 for(int i = 1; i <= m; ++i){ //小于等于总个数,从 1 开始for(int j = T; j >= ...

  2. [AcWing] 9. 分组背包问题(C++实现)分组背包问题模板题

    [AcWing] 9. 分组背包问题(C++实现)分组背包问题模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 ...

  3. 【Leetcode】背包问题模板

    https://leetcode-cn.com/problems/combination-sum-iv/solution/xi-wang-yong-yi-chong-gui-lu-gao-ding-b ...

  4. MangataのACM模板

    文章目录 数据结构 并查集 树状数组 二维单点修改,区间查询 二维区间修改,单点查询 二维区间修改,区间查询 线段树 单点修改,区间查询 区间更新.区间查询 主席树(区间第k小数模板) 单调栈 单调队 ...

  5. 多重背包问题——庆功会

    为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员. 期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力. 输入格式 第一行二个数n,m,其中n代表 ...

  6. c++/go算法模板, 刷题记录

    ◉ 一.数组 912. 排序数组 给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5 ...

  7. 一本通 1267:【例9.11】01背包问题

    01背包问题 经典的01背包问题模板 这里提供两种做法: #include <iostream> #include <cstdio> using namespace std; ...

  8. Leetcode动态规划——01背包问题

    内容参考 https://blog.csdn.net/yoer77/article/details/70943462 https://labuladong.github.io/ebook/动态规划系列 ...

  9. 金明的预算方案(洛谷-P1064)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 NN ...

  10. 最全动态规划题型详解

    文章目录 前言 数字三角形模型 1. 数字三角形 2. 最低通行费 3. 方格取数 总结 最长上升子序列模型 1. 最长上升子序列(LIS) 2. 怪盗基德的滑翔翼 3. 最长公共子序列 4. 最长公 ...

最新文章

  1. 微信小程序开发-笔记
  2. Python--读取csv文件的整列
  3. python素数判断代码_Python 判断101-200之间有多少个素数,并输出所有素数
  4. 将一个大文件分成若干个小文件方法
  5. Akka并发编程——第三节:Actor模型(二)
  6. mapview Java,Class:android核心类/MapView
  7. 剑指offer之消息中间件ActiveMQ知识总结
  8. java swing jcheckbox_Swing JCheckBox类
  9. ajax的嵌套需要注意的问题
  10. FPGA实现VGA显示(五)——————配置ROM测试及图片显示(b)
  11. 菜鸟上网必备知识大全
  12. 如何去追女生,看了你就成功了一半
  13. 如何下载安装 Visual Studio2010
  14. 超定方程组最小二乘matlab,超定方程组最优解(最小二乘解)推导
  15. 深圳最牛街道办:腾讯华为设总部,百家上市公司年营收超2万亿
  16. MIUI12系统如何刷入开发版获得ROOT权限
  17. 杨百翰大学计算机科学专业,杨百翰大学计算机科学硕士.pdf
  18. OpenCV每日函数 几何图像变换模块 (8) remap函数
  19. 抗疫先锋 | IBM:同心抗疫,重塑未来 - emerge smarter!
  20. Android相机开发: 触摸对焦,触摸测光,二指手势缩放

热门文章

  1. 批量删除新浪微博关注
  2. WIN7 64位 VS2013下载
  3. 深度学习在视频行为识别中应用
  4. CDRX4X5X6X7X8下载安装失败的原因教程分享(CorelDRAW)
  5. 2017 matlab 仿真,【2017年整理】Simulink仿真教程.ppt
  6. 计算多条线段总长的lisp程序_CAD二次开发-lisp篇(1)统计长度
  7. Android 接入阿里云推送com.aliyun.ams:alicloud-android-push:3.7.4步骤(一)
  8. 三菱plc分拣程序_基于三菱PLC控制的物料分拣系统设计与实现
  9. Silvaco仿真入门
  10. 数据结构:图(Graph)【详解】