经典01背包问题(C++)--详解
二维数组解决01背包问题
题目:
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
第 i 件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
//01背包问题
//【二维数组】求解背包问题
//1.二维数组
#include <iostream>
#include <algorithm>//为调用max函数
using namespace std;
int n,v1;//n为物品数量,v1为背包大小
int f[1005][1005];//n件物品放到容量为v1的背包里的最优解
int v[1005];//物品体积数组
int w[1005];//物品价值数组
int main()
{
cin>>n>>v1;//输入物品数量,背包大小
for(int i=1;i<=n;i++){
cin>>v[i]>>w[i];
}
for(int i=1;i<=n;i++){//读取物品
for(int j=1;j<=v1;j++){//背包容量逐渐增加
if(j<v[i])//如果背包容量小于物品体积
//则第i件物品无法装进去。
//所以i的最优解与i-1件物品的最优解相同。
f[i][j]=f[i-1][j];
else
/*第i件物品可以装进去,则判断装与不装谁最优
因为对所有物品只有装与不装
1,不装:不装的话与上面相同,f[i][j]=f[i-1][j];
2,装;f[i][j]=f[i-1][j-v[i]+w[i];
f[i-1][j-v[i]]是在第i件物品之前的最优解,即i-1的最优解 ,
"-v[i]"是因为需要为第i件物品空出空间,"+w[i]"是把第i件物品选中;
*/
f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]);
}
}
cout<<f[n][v1];
/*对应上边 "int f[1005][1005];//n件物品放到容量为v1的背包里的最优解 ",
f[n][v1]表示为"n件物品放到v1背包最优解"
*/
return 0;
}
经典01背包问题(C++)--详解的更多相关文章
- openerp经典收藏 对象定义详解(转载)
对象定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...
- HDU 2602 Bone Collector(经典01背包问题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/O ...
- openerp经典收藏 字段定义详解(转载)
字段定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...
- 一个经典的 HTTP协议详解
1引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1 ...
- 算法进阶面试题01——KMP算法详解、输出含两次原子串的最短串、判断T1是否包含T2子树、Manacher算法详解、使字符串成为最短回文串
1.KMP算法详解与应用 子序列:可以连续可以不连续. 子数组/串:要连续 暴力方法:逐个位置比对. KMP:让前面的,指导后面. 概念建设: d的最长前缀与最长后缀的匹配长度为3.(前缀不能到最后一 ...
- 【经典案例】Python详解设计模式:策略模式
完成一项任务往往有多种方式,我们将其称之为策略. 比如,超市做活动,如果你的购物积分满1000,就可以按兑换现金抵用券10元,如果购买同一商品满10件,就可以打9折,如果如果购买的金额超过500,就可 ...
- 经典算法 Manacher算法详解
内容: 1.原始问题 =>O(N^2) 2.Manacher算法 =>O(N) 1.原始问题 Manacher算法是由题目“求字符串中长回文子串的长度”而来.比如 abcdcb 的 ...
- Java经典面试题及详解
Java基础方面: 1.作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package ...
- HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- netty系列之:我有一个可扩展的Enum你要不要看一下?
目录 简介 enum和Enum netty中可扩展的Enum:ConstantPool 使用ConstantPool 总结 简介 很多人都用过java中的枚举,枚举是JAVA 1.5中引用的一个新的类 ...
- Python数据分析--Numpy常用函数介绍(6)--Numpy中与股票成交量有关的计算
成交量(volume)是投资中一个非常重要的变量,它是指在某一时段内具体的交易数,可以在分时图中绘制,包括日线图.周线图.月线图甚至是5分钟.30分钟.60分钟图中绘制. 股票市场成交量的变化反映了资 ...
- electron vue
vue create project vue add vue-cli-plugin-electron-builder node_modules\@vue\cli-service\lib\config\ ...
- # 【由浅入深_打牢基础】WEB缓存投毒(上)
image-20220611092344882 [由浅入深_打牢基础]WEB缓存投毒(上) 1. 什么是WEB缓存投毒 简单的来说,就是利用缓存将有害的HTTP响应提供给用户 什么是缓存,这里借用Bu ...
- [MRCTF2020]Ezpop-1|php序列化
1.打开题目获取到源代码信息,如下: Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From h ...
- linux firewall (marker)
查看防火墙是否开启systemctl status firewalld 若没有开启则是开启状态systemctl start firewalld 关闭则start改为stop 查看所有开启的端口fi ...
- java使用配置skywalking
一 .elasticsearch 和elasticsearch-head 1.下载 elasticsearch-6.3.1 ,下载地址 :https://pan.baidu.com/s/1ymxy ...
- 函数式接口的概念&函数式接口的定义和函数式接口的使用
函数式接口概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口. 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambd ...
- Solution -「Hdu3037」Saving Beans
Prob. 给定 \(m\) 个相同球,\(n\) 个不同的盒子. 求在这 \(n\) 个盒子中放不超过 \(m\) 个球的方案数,并对 \(p\) 取模. 其中 \(1 \leq n, m \leq ...
- 【Unity基础知识】基础游戏单位GameObject中常用的属性和API
一.GameObject中的成员变量 主要思想:得到该脚本依附的GameObject的相关信息 现有: Lesson4的代码: using System.Collections; using Syst ...