C++:背包问题习题

1. 货币系统

1371. 货币系统 - AcWing题库

给定 V 种货币(单位:元),每种货币使用的次数不限。

不同种类的货币,面值可能是相同的。

现在,要你用这 V 种货币凑出 N 元钱,请问共有多少种不同的凑法。

解题思路

我们两层循环分别枚举到第i种物品了,价值为j

如果枚举的价值大于当前枚举物品的价值就将f[i][j]的值赋为f[i][j-w[i]].这个值记录用w[i]凑到j的方法数量

不选的方法与f[i-1][j]的值相同。即不用w[i]凑到j的方法

AC代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>using namespace std;int v,n;
long long w[30];
long long f[30][10010];//前i种物品选择价值为j的方案数
int main()
{scanf("%d%d",&v,&n);for(int i=1;i<=v;i++){scanf("%d",&w[i]);}f[0][0]=1;for(int i=1;i<=v;i++){for(int j=0;j<=n;j++){if(j>=w[i])//选了{f[i][j]=f[i][j-w[i]];//凑f[i][j-w[i]](即少选一次w[i]的方法) 有几个方法,就是用w[i] 来凑到j的方法}//没选f[i][j]+=f[i-1][j];//加上没有这个i的方法,即不用w[i]来凑到j的方法}}printf("%lld",f[v][n]);return 0;
}

2. 01背包

2. 01背包问题 - AcWing题库

有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。

第 i 件物品的体积是 vi,价值是 wi。

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

 解题思路

两层循环分别来枚举,到第i个物品,体积不小于j

如果j小于v[i](v这个数组用来记录i个物品的体积,w数组用来记录价值)那只能不拿,价值就是不选i体积为j的价值

如果不小于就可以选择拿还是不拿,将拿了第i个物品体积才到j与不拿这个物品体积就到j的价值进行比较取较大值

AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int N, V;
int v[1010];
int w[1010];
int f[1010][1010];//前i件物品中,寻找不超过j个体积的最大价值
int main()
{scanf("%d%d", &N, &V);for (int i = 1; i <= N; i++){scanf("%d%d", &v[i], &w[i]);}for(int i=1;i<=N;i++)//前{for(int j=0;j<=V;j++)//体积{if(j<v[i])//不能拿{f[i][j]=f[i-1][j];//与没i是一样的,取值为不选第i件物品体积为j的最大价值}else//可以拿{f[i][j]=max(f[i-1][j-v[i]]+w[i],f[i-1][j]);//比较不拿第i件物品体积达到j与拿了第i件物品体积达到j谁更大}}}printf("%d\n", f[N][V]);return 0;
}

 3. 完全背包

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

第 i 种物品的体积是 vi,价值是 wi。

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

解题思路

与01背包不同的是完全背包的每一种都可以无限选择,所以它选择第i个不用使i-1后再统计j-v[i],因为之前可能使用过i了没使用(或使用了不如不用)那f[i][j-v[i]]也在之前初始化为了f[i-1][j-v[i]]

AC代码
#include<iostream>
#include<cstring>
#include<cstdio>using namespace std;int N,V;
int v[1010];
int w[1010];int f[1010][1010];int main()
{scanf("%d%d",&N,&V);for(int i=1;i<=N;i++){scanf("%d %d",&v[i],&w[i]);}for(int i=1;i<=N;i++)//枚举第i件物品{for(int j=0;j<=V;j++){if(j<v[i])//不能放{f[i][j]=f[i-1][j];//统计没放的}else//能放f[i][j]=max(f[i-1][j],f[i][j-v[i]]+w[i]);//没放这一次的价值,即选了k-1次i物品的价值}}cout<<f[N][V]<<endl;return 0;
}

4. 砝码称重

你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WNW1,W2,···,WN。

请你计算一共可以称出多少种不同的正整数重量?

注意砝码可以放在天平两边。

 解题思路

两层循环,枚举第i个砝码,能否凑成j的重量,存储值为布尔类型

一个砝码有三种情况,放在天平右边(看当前重量减去这个砝码重量是否能凑成(取绝对值,因为这边超过另一半,超过的重量也成立)),放在左边(同上不过是加上)与不放(看上一个可不可以即可),只要有一种可以就能凑成。

将0个砝码,0重量初始化为true,但最后累计时不能算上,因为只统计正整数,0不是

 AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>using namespace std;int N;
int v[110];bool f[110][200010];int main()
{scanf("%d",&N);int sum=0;for(int i=1;i<=N;i++){scanf("%d",&v[i]);sum+=v[i];}f[0][0]=true;//0肯定能凑出来,什么也不放就行for(int i=1;i<=N;i++)//第i个{for(int j=0;j<=sum;j++)//凑j的重量,能否凑成{//1如果不放就能达到j这个重量那肯定可以,2如果放到左边看不放之前有没有这个重量f[i][j]=f[i-1][j]|f[i-1][j+v[i]]|f[i-1][abs(j-v[i])];//不放和放左边和放右边}}int res=0;for(int i=1;i<=sum;i++)//i不能从0开始因为0不是正整数{if(f[N][i])res++;}printf("%d",res);return 0;
}

这篇就到这里啦(づ ̄3 ̄)づ╭❤  ~(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/74219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js

P(rocess)M(anager)2 是一个 node.js 下的进程管理器&#xff0c;内置负载均衡&#xff0c;支持应用自动重启&#xff0c;常用于生产环境运行 node.js 应用&#xff0c;非常好用&#x1f44d; &#x1f33c;概述 2025-03-15日&#xff0c;PM2发布最新版本v6.0.5&#xff0c;这…

2025年01月02日浙江鼎永前端面试

目录 webpack 和 vite 区别react fiber 架构vue diff 算法react diff 算法hooks 源码垂直水平布局项目介绍单点登录大文件上传微前端 1. webpack 和 vite 区别 Webpack 和 Vite 是两种不同的前端构建工具&#xff0c;它们在设计理念、性能表现和使用场景上存在显著差异。以下…

1.企业级AD活动目录核心解析:架构、组件与集成实践

在当今数字化时代&#xff0c;企业级网络环境日益复杂&#xff0c;高效、安全的资源管理和用户认证成为企业 IT 运营的关键。AD&#xff08;Active Directory&#xff09;活动目录作为微软 Windows 系列服务器中的重要目录服务&#xff0c;为企业级网络管理提供了强大的解决方案…

【数据分享】2014-2024年我国各城市逐年空气质量指数(AQI)数据

空气质量指数&#xff08;AQI&#xff09;是一个衡量空气污染程度的综合指标&#xff0c;它并不直接表示具体污染物的浓度值&#xff0c;而是基于多种污染物的浓度进行的综合评价&#xff0c;具体基于六种主要污染物的浓度&#xff1a;PM2.5、PM10、SO₂、NO₂、O₃和CO。AQI是…

【C++】深入理解list迭代器的设计与实现

深入理解list迭代器的设计与实现 引言1、链表基础结构2、链表迭代器的封装2.1 初步封装迭代器类2.2 引入const迭代器2.2.1 参考STL源代码2.2.2 完善迭代器 3、迭代器实现机制结语 引言 在STL容器中&#xff0c;list作为经典的双向链表容器&#xff0c;其迭代器设计体现了C模板编…

C语言基础系列【27】typedef

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…

【CXX-Qt】2.5 继承

某些 Qt API 要求你从抽象基类中重写某些方法&#xff0c;例如 QAbstractItemModel。 为了支持直接从 Rust 中创建这样的子类&#xff0c;CXX-Qt 提供了多种辅助工具。 某些基类可能需要特殊的构造参数。这可以通过使用自定义构造函数来实现。 访问基类方法 要在 Rust 中访…

磁盘清理工具-TreeSize Free介绍

TreeSizeFree是一个磁盘空间管理工具&#xff0c;主要用于分析磁盘使用情况&#xff0c;帮助用户找到占用空间大的文件和文件夹: 特点&#xff1a;按大小排序&#xff1a;快速找到占用空间最大的文件或文件夹 一般可以删除: 扫描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…

OpenCV中距离公式

一、各类距离公式总结 常见距离公式 欧氏距离&#xff1a; 曼哈顿距离&#xff08;L1&#xff09;‌&#xff1a; 切比雪夫距离&#xff08;Chessboard&#xff09;‌&#xff1a; 1、点与点距离(欧氏距离) ‌二维空间‌ 设两点坐标为 P1(x1,y1)、P2(x2,y2)&#xff0c;其距离…

Vue.js 模板语法全解析:从基础到实战应用

引言 在 Vue.js 的开发体系中&#xff0c;模板语法是构建用户界面的核心要素&#xff0c;它让开发者能够高效地将数据与 DOM 进行绑定&#xff0c;实现动态交互效果。通过对《Vue.js 快速入门实战》中关于 Vue 项目部署章节&#xff08;实际围绕 Vue 模板语法展开&#xff09;…

论文笔记(七十三)Gemini Robotics: Bringing AI into the Physical World

Gemini Robotics: Bringing AI into the Physical World 文章概括1. 引言2. Gemini 2.0的具身推理2.1. 具身推理问答&#xff08;ERQA&#xff09;基准测试2.2. Gemini 2.0的具身推理能力2.3. Gemini 2.0支持零样本和少样本机器人控制 3. 使用 Gemini Robotics 执行机器人动作3…

centos7搭建postgresql12主从

主从搭建 192.168.159.101 node1 主库&#xff08;读写&#xff09; 192.168.159.102 node2 备库&#xff08;只读&#xff09; 两台机器首先安装postgrsql 主库 postgres用户操作&#xff1a; 修改postgresql.conf # 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外…

嵌入式基础知识学习:SPI通信协议是什么?

SPI&#xff08;Serial Peripheral Interface&#xff09;是串行外设接口的缩写&#xff0c;是一种广泛应用于嵌入式系统的高速同步串行通信协议&#xff0c;由摩托罗拉公司于20世纪80年代提出。以下是其核心要点&#xff1a; 一、SPI的核心定义与特点 基本特性 全双工同步通信…

996引擎-接口测试:背包

996引擎-接口测试:背包 背包测试NPC参考资料背包测试NPC CONSTANT = require("Envir/QuestDiary/constant/CONSTANT.lua"); MsgUtil = require("Envir/QuestDiary/utils/996/MsgUtil.lua");

vulnhub靶场之【hack-me-please靶机】

前言 靶机&#xff1a;billu_b0x2靶机&#xff0c;IP地址为192.168.10.8 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 靶机和攻击机都采用VMware虚拟机&#xff0c;都采用桥接网卡模式 文章涉及的靶机及工具&#xff0c;都可以自行访问官网或者项目地址进行获取&…

机器学习——KNN模型评价

一、主要函数 sklearn.metrics.accuracy_score() 是 scikit-learn 中用于计算分类模型准确率的函数&#xff0c;适用于评估分类任务的整体性能。 1、核心功能 作用&#xff1a;计算模型预测的准确率&#xff0c;即正确分类的样本数占总样本数的比例。公式&#xff1a;Accurac…

美国国家数据浮标中心(NDBC)

No.大剑师精品GIS教程推荐0地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 1Openlayers 【入门教程】 - 【源代码示例 300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3MapboxGL【入门教程】 - 【源代码图文示例150】 4Cesium 【入门教程】…

Qt调用Miniconda的python方法

1、 Win 64环境下载及安装 Miniconda 首先下载Windows 版Miniconda&#xff0c;https://docs.conda.io/en/latest/miniconda.html或 https://repo.anaconda.com/miniconda/ 安装界面及选择如下图所示&#xff1a; 安装完python3.12版报错如下。 说明&#xff1a;python3.11版…

Unity 与 JavaScript 的通信交互:实现跨平台的双向通信

前言 在现代游戏开发和 Web 应用中&#xff0c;Unity 和 JavaScript 的结合越来越常见。Unity 是一个强大的跨平台游戏引擎&#xff0c;而 JavaScript 是 Web 开发的核心技术之一。通过 Unity 和 JavaScript 的通信交互&#xff0c;开发者可以实现从 Unity 到 Web 页面的功能扩…

汽车免拆诊断案例 | 2024 款路虎发现运动版车无法正常识别智能钥匙

故障现象  一辆2024款路虎发现运动版车&#xff0c;搭载2.0 L发动机&#xff0c;累计行驶里程约为5 000 km。车主反映&#xff0c;使用遥控器无法解锁车门&#xff0c;随后使用机械钥匙打开车门&#xff0c;踩下制动踏板&#xff0c;按压起动按钮&#xff0c;仪表盘提示“将智…