有 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. SAMBA配置文件所用到的参数
  3. Xcode(7.0以上版本)真机调试
  4. 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8732EM电磁流量计变送器如何接线!
  5. 数智化时代合格数据架构师如何养成?
  6. P1377 [TJOI2011]树的序 笛卡尔树优化建树
  7. 从淘宝CFO到接棒马云 张勇是如何在12年里成为阿里董事局主席的
  8. 浙大计算机基础知识2,[精选资料]14年浙大远程计算机基础2Windows知识题高起专 作业题2答案...
  9. 大专生自学web前端到找到工作的经验
  10. SQL建表语句转换为Excel表格
  11. 用matlab指数传递函数nyquist,用MATLAB制Nyquist图.ppt
  12. AE 或PR等软件载入素材时,无法访问网络驱动器资源的问题
  13. 【PTA】到底是不是太胖了
  14. 最简单的基于FFmpeg的推流器(以推送RTMP为例)
  15. 混合云风头正劲 青云QingCloud为何成为领导者?
  16. 无法打开安装程序包....确认这是一个有效的windows installer程序包
  17. iphone的图书iBooks如何设置垂直滚动看书
  18. linux pjsip 编译_Linux下移植pjsip使用QT开发
  19. UE4引擎之Commandlet命令
  20. 一位平安集团16年老员工:怕你胸有鸿鹄之志,手无缚鸡之力

热门文章

  1. 超级玛丽java_超级玛丽java实现源码
  2. 使用pdf编辑器如何旋转页面
  3. vs2013 update5离线升级包下载地址
  4. ETL最佳实践-NiFi
  5. 黑马程序员_java基础一
  6. js实现文本语音播放
  7. 基于 Mybatis 和 Springboot 的后台管理系统 BootDo | 软件推介
  8. APP跳转H5、微信小程序与微信小程序之间互跳
  9. 软件工程学习笔记(八)~习题:建立等价类表
  10. 在密码输入框内按回车就登陆的功能