首页 > 其他分享 >#yyds干货盘点# 动态规划专题:01背包

#yyds干货盘点# 动态规划专题:01背包

时间:2022-11-19 19:31:07浏览次数:60  
标签:yyds 01 dp2 dp1 int 干货 物品 new 背包

1、简述:

描述

你有一个背包,最多能容纳的体积是V。

现在有n个物品,第i个物品的体积为#yyds干货盘点# 动态规划专题:01背包_i++ ,价值为#yyds干货盘点# 动态规划专题:01背包_i++_02

(1)求这个背包至多能装多大价值的物品?

(2)若背包恰好装满,求至多能装多大价值的物品?

输入描述:

第一行两个整数n和V,表示物品个数和背包体积。

接下来n行,每行两个数#yyds干货盘点# 动态规划专题:01背包_i++#yyds干货盘点# 动态规划专题:01背包_i++_02,表示第i个物品的体积和价值。

#yyds干货盘点# 动态规划专题:01背包_倒序_05

输出描述:

输出有两行,第一行输出第一问的答案,第二行输出第二问的答案,如果无解请输出0。

示例1

输入:

3 5
2 10
4 5
1 4

输出:

14
9

说明:

装第一个和第三个物品时总价值最大,但是装第二个和第三个物品可以使得背包恰好装满且总价值最大。
示例2

输入:

3 8
12 6
11 8
6 8

输出:

8
0

说明:

装第三个物品时总价值最大但是不满,装满背包无解。

2.代码实现:

import java.util.*;

public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
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;i++){
v[i]=sc.nextInt();
w[i]=sc.nextInt();
}

//dp1[i]表示不考虑背包是否装满,在容量为i的情况下,最多装多大价值的物品
int[] dp1=new int[V+1];
for(int i=1;i<=n;i++){
//由于每个物品只能用一次,为了防止重复计算,需要倒序遍历
for(int j=V;j>=v[i];j--){
//状态转移,要么选择第i件物品,要么不选,取价值最大的
dp1[j]=Math.max(dp1[j-v[i]]+w[i],dp1[j]);
}
}

System.out.println(dp1[V]);

//dp2[i]表示背包恰好装满时,在容量为i的情况下,最多装多大价值的物品
int[] dp2=new int[V+1];
Arrays.fill(dp2,Integer.MIN_VALUE);
//没有物品时,价值为0
dp2[0]=0;
for(int i=1;i<=n;i++){
//由于每个物品只能用一次,为了防止重复计算,需要倒序遍历
for(int j=V;j>=v[i];j--){
//状态转移,要么选择第i件物品,要么不选,取价值最大的
dp2[j]=Math.max(dp2[j-v[i]]+w[i],dp2[j]);
}
}
//如果小于0,说明不能从初始状态转移过来,无解
if(dp2[V]<0){
dp2[V]=0;
}
System.out.println(dp2[V]);
}
}

标签:yyds,01,dp2,dp1,int,干货,物品,new,背包
From: https://blog.51cto.com/u_15488507/5870616

相关文章

  • 20201322学习笔记12
    第十四章MySQL数据库系统14.1Mysql简介MySQL是一个关系数据库系统。在关系数据库中,数据存储在表中。每个表由多个行和列组成。表中的数据相互关联。表也可能与其他表有......
  • 101:面向对象的三大特征说明(封装、继承、多态)
    ###面向对象三大特征介绍Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。###封装(隐藏)   隐藏对象的属性和实现细节,只对外提供必要的......
  • 2018 Make Some Noise: Unleashing the Power of Convolutional Neural Networks for P
    一、CNN和人工噪声1Sample-levelCNN(RD网络)设计原则:类似于VGG结构的一维输入小过滤器连续卷积块直到特征维度下降到1通道个数从一个较小的数持续扩大引入......
  • 前端011-hover
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>hover</title><style>.menu{width:100px;background......
  • 前端010-overfloat
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>overfloat</title></head><bodystyle="width:980px;margin:0auto;"><h3>overflow:......
  • VMware Fusion Pro for mac(vm虚拟机) v13.0.0(20802013)激活版
    VMwareFusionPro是一款功能强大的虚拟机软件,提供了在Mac上运行Windows以及数百个其他操作系统与Mac应用程序并行运行的能力,而无需重新启动!并且允许您从数百种受支持的操作......
  • 《Unix/Linux系统编程》第十四章学习笔记 20201209戴骏
    MySQL数据库系统知识点总结一、MySQLMySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,......
  • orcale笔记01-DCL语言
    username:用户名sys:超级管理员用户;system:一般管理员用户password:密码datebase:要连接的数据库connectas:模式normal:普通模式 sysdba:管理员模式 sysoper......
  • SQLSERVER 2012迁移实施方案
    一、概述一台SQLSERVER2012企业版的数据库需要迁移到另一台机器上,具体情况如下:登陆账号众多,有数百个。job众多,有数百个。DB库的数量多,数据大,DB总大小达10T多,DB数量90......
  • CMake gui 生成vs2019项目
    先准备两个文件夹src文件夹存放CMakeLists.txt和编写的源文件build文件夹用于存放cmake生成的一些文件(暂时为空)打开CMake界面,选择刚刚准备好的两个文件夹点......