今日总结2024.5.14

今日复习了分组背包的用法

P1064 [NOIP2006 提高组] 金明的预算方案

题目描述

金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 𝑛n 元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

主件附件
电脑打印机,扫描仪
书柜图书
书桌台灯,文具
工作椅

如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、1 个或 2 个附件。每个附件对应一个主件,附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈妈限定的 n 元。于是,他把每件物品规定了一个重要度,分为 5 等:用整数 1∼5 表示,第 5 等最重要。他还从因特网上查到了每件物品的价格(都是 1010 元的整数倍)。他希望在不超过 n 元的前提下,使每件物品的价格与重要度的乘积的总和最大。

设第 j 件物品的价格为 vj​,重要度为wj​,共选中了 k 件物品,编号依次为 1​,j2​,…,jk​,则所求的总和为:

𝑣𝑗1×𝑤𝑗1+𝑣𝑗2×𝑤𝑗2+⋯+𝑣𝑗𝑘×𝑤𝑗𝑘

请你帮助金明设计一个满足要求的购物单。

输入格式

第一行有两个整数,分别表示总钱数 𝑛n 和希望购买的物品个数 𝑚m。

第 2 到第 (m+1) 行,每行三个整数,第 (i+1) 行的整数 vi​,pi​,qi​ 分别表示第 i 件物品的价格、重要度以及它对应的的主件。如果 qi​=0,表示该物品本身是主件。

输出格式

输出一行一个整数表示答案。

本题是将每个主件看成一组,每组内的物品分别为主件+附件的搭配,因为每个附件在选主件的情况下是选或者不选2^n因此可以使用二进制枚举,然后再用分组背包,对组内每个物品进行判断是否能选取最大值即可

//参考yxc大佬代码
#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>
using namespace std;
const int N=4e4,M=70;
typedef pair<int,int> PII;
#define x first
#define y second
PII mas[M];//存主要物品
vector<PII> sv[M];//存附属
int f[N];//选到第i组,总价格不超过j的最大价格乘以重要度值int main(){int n,m;cin>>m>>n;for(int i=1;i<=n;i++){int v,p,q;cin>>v>>p>>q;if(q) sv[q].push_back({v,p*v});else mas[i]={v,v*p};//把价格和价格乘以重要度存入}for(int i=1;i<=n;i++)for(int j=m;j;j--){for(int k=0;k<1<<sv[i].size();k++){//枚举组内所有物品选还是不选int v=mas[i].x,w=mas[i].y;for(int u=0;k<sv[i].size();u++)if(k>>u&1==1){v+=sv[i][u].x,w+=sv[i][u].y;} //二进制枚举算出每组选法的体积和价值if(j>=v) f[j]=max(f[j],f[j-v]+w);}}cout<<f[m];return 0;
}
P1060 [NOIP2006 普及组] 开心的金明

弱化版,01背包即可

#include <iostream>
#include <algorithm>
#include <utility>
using namespace std;
const int N=30,M=3e4+5;
typedef pair<int,int> PII;
int v[N],f[M],w[N];//f[i,j]表示选前i个物品,体积不超过j的最大总和int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n,m;cin>>m>>n;for(int i=1;i<=n;i++){int a,b;cin>>a>>b;//价格,重要度v[i]=a;w[i]=a*b;}for(int i=1;i<=n;i++)for(int j=m;j>=v[i];j--) f[j]=max(f[j],f[j-v[i]]+w[i]);cout<<f[m];return 0;
}
AcWing 1021. 货币系统 

题目描述
给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。

输入格式
第一行,包含两个整数n和m

接下来n
行,每行包含一个整数,表示一种货币的面值。

输出格式
共一行,包含一个整数,表示方案数。

数据范围
n≤15,m≤3000

输入样例:
3 10
1
2
5
输出样例:
10

实际上就是一个完全背包的方案问题,求n种面值的货币组成面值为m的方案数

状态表示为从前i个物品中选,面值为j的方案

属性为数量count

状态表示为f[i-1,j]第i个面值不选,由前i-1个面值组成面值为j的方案转移而来

f[i-1,j-v],f[i-1,j-2v]......f[i-1,j-sv]选第i个面值,且选k个,k取决于枚举到的体积j

k*v<=j

#include <iostream>
using namespace std;
const int N = 3010;
int v[N];
long long f[N][N];//会爆int
int main(){int n,m;scanf("%d%d",&n,&m);f[0][0] = 1;for(int i = 1;i <= n;i ++) scanf("%d",&v[i]);for(int i = 1;i <= n;i ++){for(int j = 0;j <= m;j ++){for(int k = 0;v[i] * k <= j;k ++){f[i][j] += f[i - 1][j - v[i] * k];}}}printf("%lld",f[n][m]);//输出longlong用lldreturn 0;
}

也可以用f[i,j-v]优化掉一维循环

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

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

相关文章

机器学习-12-sklearn案例02-集成学习

总结 参考 菜菜的sklearn课堂——随机森林 傻子都能看懂的——详解AdaBoost原理 算法使用过程 #导入数据集模块 from sklearn import datasets #分别加载iris和digits数据集 iris datasets.load_iris() #鸢尾花数据集 # print(dir(datasets)) # print(iris_dataset.keys…

76岁林子祥升级做爷爷,亲自为孙女取名

林子祥与前妻吴正元的儿子&#xff0c;现年39岁的林德信入行以来绯闻不少&#xff0c;自与圈外女友Candace拍拖后便修心养性&#xff0c;去年他已经低调与拍拖5年多Candace完婚&#xff0c;正式步入人生另一阶段。 昨日&#xff08;5月12日&#xff09;林德信借母亲节这个温馨日…

C++ 并发编程指南(11)原子操作 | 11.4、通过内存序实现顺序模型

文章目录 一、通过内存序实现顺序模型1、Relaxed Ordering2、Sequencial Consistent Ordering3、Acquire Release Ordering 前言 前文介绍了六种内存顺序&#xff0c;以及三种内存模型&#xff0c;本文通过代码示例讲解六种内存顺序使用方法&#xff0c;并实现相应的内存模型。…

【MySQL数据库开发设计规范】之索引设计规范

欢迎点开这篇文章&#xff0c;自我介绍一下哈&#xff0c;本人姑苏老陈 &#xff0c;是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中&#xff0c;该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章&#xff0c;定期更新&#xff0c;欢迎关注&…

【综述】人工智能、机器学习、深度学习

文章目录 前言 概念 算法 训练 性能 应用 参考资料 前言 见《初试人工智能》 概念 人工智能系统&#xff08;artifieial intelligence system&#xff09;&#xff0c;针对人类定义的给定目标&#xff0c;产生诸如内容、预测、推荐或决策等输出的一类工程系统。该工程系…

【C++】string|迭代器iterator|getline|find

目录 ​编辑 string 1.string与char* 的区别 2.string的使用 字符串遍历 利用迭代器遍历 范围for遍历 反向迭代器 字符串capacity 字符串插入操作 push_back函数 append函数 运算符 ​编辑 insert函数 substr函数 字符串查找函数 find函数 rfind函数 …

Go 处理错误

如果你习惯了 try catch 这样的语法后&#xff0c;会觉得处理错误真简单&#xff0c;然后你再来接触 Go 的错误异常&#xff0c;你会发现他好复杂啊&#xff0c;怎么到处都是 error&#xff0c;到处都需要处理 error。 首先咱们需要知道 Go 语言里面有个约定&#xff0c;就是一…

灵活的静态存储控制器 (FSMC)的介绍(STM32F4)

目录 概述 1 认识FSMC 1.1 应用介绍 1.2 FSMC的主要功能 1.2.1 FSMC用途 1.2.2 FSMC的功能 2 FSMC的框架结构 2.1 AHB 接口 2.1.1 AHB 接口的Fault 2.1.2 支持的存储器和事务 2.2 外部器件地址映射 3 地址映射 3.1 NOR/PSRAM地址映射 3.2 NAND/PC卡地址映射 概述…

GPT搜索鸽了!改升级GPT-4

最近OpenAI太反常&#xff0c;消息一会一变&#xff0c;直让人摸不着头脑。 奥特曼最新宣布&#xff1a;5月13日开发布会&#xff0c;不是GPT-5&#xff0c;也不是盛传的GPT搜索引擎&#xff0c;改成对ChatGP和GPT-4的升级&#xff5e; 消息一出&#xff0c;大伙儿都蒙了。 之…

运维别卷系列 - 云原生监控平台 之 02.prometheus exporter 实践

文章目录 [toc]exporter 简介常用的 exporternode-exporter 实践创建 svc创建 daemonsetprometheus 配置服务发现 exporter 简介 随着 Prometheus 的流行&#xff0c;很多系统都已经自带了用于 Prometheus 监控的接口&#xff0c;例如 etcd、Kubernetes、CoreDNS 等&#xff0c…

PuLID: 图像背景、光线、风格等均保持高度一致图像生成工具,附本地一键包

PuLID是一种无需调优的ID定制方法。PuLID保持了高的ID保真度&#xff0c;同时有效地减少了对原始模型行为的干扰。 只需要提供一张照片&#xff0c;就可以生成高还原度的各种风格的图像。 使用方法&#xff1a;解压一键包&#xff0c;双击一键启动 点击ID图像&#xff08;主…

Llama 3 超级课堂 -笔记

课程文档&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频&#xff1a;https://space.bilibili.com/3546636263360696/channel/series 1 环境配置 1.1 创建虚拟环境,名为&#xff1a;llama3 conda create -n llama3 python3.10 1.2 下载、安装 pyt…

第十六篇:数据库性能优化:从基础到高级的全面指南

数据库性能优化&#xff1a;从基础到高级的全面指南 1. 引言 在数字化的浪潮中&#xff0c;数据库作为信息系统的核心组件&#xff0c;其性能的优劣直接关系到企业的运营效率和市场竞争力。数据库性能优化不仅是一项技术挑战&#xff0c;更是一项战略任务。它要求我们深入理解…

2024深圳杯数学建模C题完整思路+配套解题代码+半成品参考论文持续更新

所有资料持续更新&#xff0c;最晚我们将于5.9号更新参考论文。 【无水印word】2024深圳杯A题成品论文23页mtlab(python)双版本代码https://www.jdmm.cc/file/27105652024深圳杯数学建模C题完整思路配套解题代码半成品参考论文持续更新https://www.jdmm.cc/file/2710545 深圳杯…

Kali Linux 安装 + 获取 root 权限 + 远程访问!保姆级教程!

kali是linux其中一个发行版&#xff0c;基于Debian&#xff0c;前身是BackTrack&#xff08;简称BT系统&#xff09;。kali系统内置大量渗透测试软件&#xff0c;可以说是巨大的渗透系统&#xff0c;涵盖了多个领域&#xff0c;如无线网络、数字取证、服务器、密码、系统漏洞等…

数据驱动测试在接口测试和网站测试中的应用

什么是数据驱动测试 据驱动测试是一种测试方法&#xff0c;其中测试数据和测试逻辑是分开的&#xff0c;测试数据被存储在外部源中&#xff08;如Excel表格、JSON文件、数据库等&#xff09;&#xff0c;测试逻辑则独立于测试数据。在测试过程中&#xff0c;测试数据被读取并传…

2024年程序员最应该关注的几件事?

对于程序员而言&#xff0c;技术和行业趋势的演变是持续关注的焦点。以下是几件2024年程序员应该关注的事情&#xff1a; 持续学习新技术&#xff1a;技术领域的快速变化要求程序员不断更新自己的技能集&#xff0c;包括编程语言、框架、工具和最佳实践。 人工智能与机器学习&…

Linux线程(四) 生产者消费者模型

目录 一、什么是生产者消费者模型 基本概念 优点以及应用场景 二、 基于阻塞队列的生产者消费者模型 三、POSIX信号量 四、基于环形队列的生产消费模型 一、什么是生产者消费者模型 Linux下的生产者消费者模型是一种经典的多线程或多进程编程设计模式&#xff0c;它用于解…

【LangChain系列 15】语言模型——LLMs(一)

原文地址&#xff1a;【LangChain系列 15】语言模型——LLMs(一) 本文速读&#xff1a; 异步API 自定义LLM Fake LLM HumanInput LLM 本文将介绍LLMs在LangChain中的一些用法&#xff0c;帮助我们更好地了解LLM模块。 01 异步API LangChain通过异步库实现了对异步的支持&a…

大模型应用的最佳实践Chains, SequentialChain使用示例

各种chain的介绍 串联式编排调用链:SequentialChain 流水线 胶水代码逻辑处理具备编排逻辑 串行 one by one的调用上一个chain的输出 作为 下一个chain的输入 超长文本的转换 Transform Chain pdf文件处理提供了套壳的能力 将python处理字符串的能力 套用进来 完成数据的格式化…