当前位置: 首页 > article >正文

UVa 233 Package Pricing

题目分析题目描述了一家销售444种尺寸节能灯泡的公司这些灯泡尺寸分别用字符a、b、c、d表示。公司提供若干优惠套餐每个套餐有目录编号、价格和包含的灯泡组合。顾客需要购买特定数量的灯泡要求找出最便宜的套餐组合方式使得购买的灯泡数量满足或超过顾客需求并输出总价和套餐清单。解题思路状态表示本题需要使用状态压缩动态规划DP\texttt{DP}DP将444种尺寸的需求量编码为一个状态。每种尺寸的需求量最多是多少题目没有明确给出但根据状态数组memo[1048576]可以推断每种尺寸的最大需求量为202020因为(201)4194481(201)^4 194481(201)4194481远小于104857610485761048576实际测试发现最大需求量为202020。使用base数组计算状态索引indexcount[0]×base[0]count[1]×base[1]count[2]×base[2]count[3]×base[3] index count[0] \times base[0] count[1] \times base[1] count[2] \times base[2] count[3] \times base[3]indexcount[0]×base[0]count[1]×base[1]count[2]×base[2]count[3]×base[3]其中base[0](need[1]1)×(need[2]1)×(need[3]1)base[1](need[2]1)×(need[3]1)base[2]need[3]1base[3]1 \begin{aligned} base[0] ( need[1] 1 ) \times ( need[2] 1 ) \times ( need[3] 1 ) \\ base[1] ( need[2] 1 ) \times ( need[3] 1 ) \\ base[2] need[3] 1 \\ base[3] 1 \end{aligned}base[0]base[1]base[2]base[3]​(need[1]1)×(need[2]1)×(need[3]1)(need[2]1)×(need[3]1)need[3]11​动态规划转移定义memo[state]存储三个信息price达到该状态的最小花费index达到该状态时最后选择的套餐编号parent达到该状态的前一个状态。初始状态memo[0] {0, -1, -1}其他状态初始化为极大值1E20。对于每个状态state解码出当前已购买的灯泡数量current[4]。然后尝试添加每种套餐packages[i]得到新状态nextnext[j]min⁡(current[j]packages[i].supply[j], need[j]) next[j] \min(current[j] packages[i].supply[j],\ need[j])next[j]min(current[j]packages[i].supply[j],need[j])如果新状态的price大于当前状态花费加上套餐价格则更新memo[next]。结果回溯求出maxState getIndex(need)后memo[maxState].price即为最小总价。然后从maxState开始回溯记录每个状态使用的套餐通过counter累加套餐的使用次数。最后输出结果时套餐按目录编号升序输出使用次数超过111时用括号注明。注意事项由于顾客请求中可能包含重复尺寸需要在输入时累加统计。输出的价格保留两位小数使用fixed和setprecision(2)。每个测试用例的counter在使用前需要清空。代码实现// Package Pricing// UVa ID: 233// Verdict: Accepted// Submission Date: 2016-06-21// UVa Run Time: 0.460s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 套餐结构体structpackage{intcatalogue;// 套餐编号doubleprice;// 套餐价格intsupply[4];// 四种尺寸灯泡的个数};// DP状态结构体structchoice{doubleprice;// 达到该状态的最小花费intindex,parent;// 最后选择的套餐编号和前一个状态};intn;// 套餐数量vectorpackagepackages;// 存储所有套餐intbase[4];// 用于状态编码的基数doubleminPrice;// 最小总价mapint,intcounter;// 统计每个套餐的使用次数choice memo[1048576];// DP状态数组// 根据当前数量数组计算状态编码intgetIndex(intcount[]){intindex0;for(intj0;j4;j)indexcount[j]*base[j];returnindex;}// 动态规划求解最便宜套餐组合voiddp(package need){// 计算基数数组base[0](need.supply[1]1)*(need.supply[2]1)*(need.supply[3]1);base[1](need.supply[2]1)*(need.supply[3]1);base[2]need.supply[3]1;base[3]1;intcurrent[4],next[4],maxStategetIndex(need.supply);// 初始化DP状态为极大值for(inti0;imaxState;i)memo[i](choice){1E20,-1,-1};// 初始状态花费为0memo[0](choice){0,-1,-1};// 遍历所有状态for(intstate0;statemaxState;state){intsstate;// 解码当前状态得到已购买的灯泡数量for(inti0;i4;i)current[i]s/base[i],s%base[i];// 尝试每种套餐for(inti0;in;i){// 计算添加套餐i后的新状态for(intj0;j4;j)next[j]min(current[j]packages[i].supply[j],need.supply[j]);intindexgetIndex(next);// 如果新状态的花费可以更小则更新if(memo[index].pricememo[state].pricepackages[i].price)memo[index](choice){memo[state].pricepackages[i].price,i,state};}}// 回溯统计套餐使用次数counter.clear();for(intstatemaxState;state0;statememo[state].parent)counter[packages[memo[state].index].catalogue];// 记录最小总价minPricememo[maxState].price;}intmain(){ios::sync_with_stdio(false);string line;while(getline(cin,line)){packages.clear();// 读取套餐数量nstoi(line);// 读取n个套餐信息for(inti1;in;i){getline(cin,line);istringstreamiss(line);package p;issp.cataloguep.price;// 初始化四种尺寸的数量为0memset(p.supply,0,sizeof(p.supply));charsize;intcount;while(isssizecount)p.supply[size-a]count;packages.push_back(p);}// 读取顾客请求数量getline(cin,line);intmstoi(line);// 处理每个顾客请求for(inti1;im;i){getline(cin,line);istringstreamiss(line);package need;memset(need.supply,0,sizeof(need.supply));charsize;intcount;while(isssizecount)need.supply[size-a]count;dp(need);// 输出结果请求编号、冒号、总价右对齐宽度8couti:setw(8)right;coutfixedsetprecision(2)minPrice;// 输出套餐组合按编号升序for(autoc:counter){if(c.second0)cout c.first;if(c.second1)cout(c.second);}coutendl;}coutendl;}return0;}

相关文章:

UVa 233 Package Pricing

题目分析 题目描述了一家销售 444 种尺寸节能灯泡的公司,这些灯泡尺寸分别用字符 a、b、c、d 表示。公司提供若干优惠套餐,每个套餐有目录编号、价格和包含的灯泡组合。顾客需要购买特定数量的灯泡,要求找出最便宜的套餐组合方式,…...

3步掌握LRC歌词制作:开源工具的终极实践指南

3步掌握LRC歌词制作:开源工具的终极实践指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 还在为制作精准同步的歌词文件而烦恼吗?传统歌词…...

overwrite

编写overwrite.c程序#inlcude<stdio.h> int main() {int b 123;int c 789;int a 456;char s[100];printf("%p\n", &a);scanf("%s", s);printf(s);if (a 16){puts("my name is c");}else if (a 2){puts("my name is small&qu…...

告别手动计算!用Python+ArcPy脚本批量搞定MODIS ET数据从8天到月均值的完整流程

从8天到月均值&#xff1a;PythonArcPy全自动处理MODIS ET数据的工程实践 当面对跨越多年、覆盖大区域的MOD16A2数据集时&#xff0c;传统的手工操作不仅效率低下&#xff0c;还容易引入人为错误。本文将展示如何用PythonArcPy构建一套完整的自动化流程&#xff0c;实现从原始8…...

UVa 232 Crossword Answers

题目分析 本题是一个填字游戏&#xff08;Crossword Puzzle\texttt{Crossword Puzzle}Crossword Puzzle&#xff09;的题目。给定一个 rcr \times crc 的网格&#xff0c;其中白色格子包含字母&#xff0c;黑色格子用 *\texttt{*}* 表示。需要按照规则对白色格子进行编号&#…...

DIY红外遥控电视关机器:从ATTINY85到晶体管驱动的硬件实践

1. 项目概述&#xff1a;从“关不掉”的烦恼到“一键清静”的实践不知道你有没有过这样的经历&#xff1a;在餐厅吃饭&#xff0c;墙上挂着的电视正播放着吵闹的广告&#xff1b;在候车室&#xff0c;多台电视同时播放着不同的节目&#xff0c;让人心烦意乱。你只想安安静静地待…...

AI写专著必备攻略:掌握这些技巧,用AI 3天完成20万字专著撰写

学术专著在写作时需要严谨的态度&#xff0c;而这种严谨性则依赖于大量的资料和数据支持。收集资料和整合数据恰恰是写作过程中最为繁琐且耗时的步骤。研究者需要广泛查找国内外的前沿文献&#xff0c;这不仅要求文献的权威性和相关性&#xff0c;还需追溯到原始来源&#xff0…...

STM32CubeMX实战:硬件CRC配置详解与软件算法性能实测

1. STM32硬件CRC模块初探 第一次接触STM32的硬件CRC模块时&#xff0c;我完全被它的效率震惊了。这个看似不起眼的外设&#xff0c;其实是个隐藏的性能怪兽。简单来说&#xff0c;CRC&#xff08;循环冗余校验&#xff09;就像给数据包贴上的防伪标签&#xff0c;而STM32内置的…...

PIC16F驱动WS2812:8位MCU实现无限随机动态灯光算法

1. 项目概述与核心思路 几年前&#xff0c;我在捣鼓一个节日南瓜灯项目时&#xff0c;遇到了一个经典难题&#xff1a;手头只有一片资源极其有限的PIC16F1847微控制器&#xff0c;却想驱动一串WS2812&#xff08;也就是大家常说的NeoPixel&#xff09;LED&#xff0c;做出那种看…...

STM32H743实战:用SN65HVD230驱动14个伺服电机,1M波特率稳如老狗

STM32H743与SN65HVD230构建高密度CANopen伺服控制系统的工程实践 在工业自动化与机器人控制领域&#xff0c;多轴协同运动控制对总线系统的实时性和稳定性提出了严苛要求。本文将深入剖析基于STM32H743微控制器与SN65HVD230 CAN收发器搭建的高密度伺服控制系统&#xff0c;分享…...

第 12 篇:W55RP20-EVB-Pico MicroPython 实战:MQTT 协议基础通信验证

本文为 WIZnet W55RP20 芯片 MicroPython教程第 12 篇&#xff0c;基于官方最新固件编写&#xff0c;代码均经过实际验证&#xff0c;可直接烧录运行。 版权声明&#xff1a;本文为 WIZnet 官方原创技术文章&#xff0c;转载请注明出处。 前言 上一篇实战教程&#xff0c;我们…...

【Perplexity实时学术搜索终极指南】:20年科研老兵亲授3大避坑法则与5倍效率提升实战技巧

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity实时学术搜索的核心原理与定位 Perplexity 实时学术搜索并非传统关键词匹配型检索系统&#xff0c;而是构建在语义理解、动态上下文建模与多源可信度验证三位一体架构之上的新一代学术信息交互范式…...

SQL左连接查询结果为NULL怎么办_使用ISNULL函数替换空值技巧.txt

...

终极Ryzen调校指南:用SMUDebugTool解锁AMD平台隐藏性能

终极Ryzen调校指南&#xff1a;用SMUDebugTool解锁AMD平台隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...

《Kubernetes应用篇:使用Helm工具部署mongodb 8.2.7副本集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《K8S集群运维指南》 一、简介 使用Helm结合Bitnami Chart是部署生产级mongodb到Kubernetes集群的事实标准方案。整个过程高度自动化,可以极大地简化运维复杂度。 在实际生产环境中,为了保障稳定运…...

传统 OA 系统为什么难以满足现代企业管理需求

传统 OA 系统为什么难以满足现代企业管理需求 OA 曾经是很多企业数字化的起点&#xff1a;通知公告、请假报销、文件流转、会议管理、用印审批&#xff0c;让办公室从纸质时代进入线上时代。但今天&#xff0c;企业对 OA 的期待已经变了。 现代企业不只需要“把审批搬到线上…...

告别DETR训练慢!手把手教你用Deformable Attention加速目标检测模型收敛

突破DETR训练瓶颈&#xff1a;Deformable Attention加速目标检测实战指南 当你在深夜盯着屏幕&#xff0c;看着DETR模型训练到第50个epoch时验证集指标仍在波动&#xff0c;是否曾怀疑自己的显卡在空转&#xff1f;Transformer架构在目标检测领域的革命性突破有目共睹&#xff…...

别再只用if-else了!Matlab里switch/case的5个高效用法与避坑指南

别再只用if-else了&#xff01;Matlab里switch/case的5个高效用法与避坑指南 在Matlab编程中&#xff0c;if-else语句几乎是每个开发者最先掌握的控制结构之一。但当你开始处理更复杂的条件逻辑时&#xff0c;一长串的if-elseif-else语句不仅让代码变得难以阅读&#xff0c;还可…...

别再复制粘贴了!深度优化你的TM1640驱动代码:效率与可维护性实战

TM1640驱动代码重构实战&#xff1a;从能用走向工业级 在嵌入式开发中&#xff0c;我们常常会遇到这样的场景&#xff1a;项目初期为了快速验证功能&#xff0c;直接从网上复制一段"能用就行"的驱动代码。但随着项目规模扩大&#xff0c;这些代码逐渐暴露出可维护性差…...

YOLOv8从零部署到实战:一站式环境配置与核心功能解析

1. YOLOv8环境搭建全攻略 第一次接触YOLOv8时&#xff0c;我也被各种依赖项搞得头晕眼花。经过多次实践&#xff0c;我总结出一套最稳妥的安装方案&#xff0c;特别适合刚入门的新手。YOLOv8作为当前最先进的目标检测框架之一&#xff0c;其安装过程确实比传统CV库复杂些&#…...

终极指南:5个简单步骤让魔兽争霸3在现代电脑上完美运行

终极指南&#xff1a;5个简单步骤让魔兽争霸3在现代电脑上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为魔兽争霸…...

ARM MHU寄存器架构与核间通信优化指南

1. ARM MHU寄存器架构概述在ARM多核处理器架构中&#xff0c;MHU&#xff08;Message Handling Unit&#xff09;是实现核间通信的关键硬件模块。作为专门优化的消息传递单元&#xff0c;MHU通过精心设计的寄存器组实现了高效的数据传输和中断管理机制。不同于传统的共享内存通…...

深度解析Thorium浏览器:Chromium性能优化的终极实战指南

深度解析Thorium浏览器&#xff1a;Chromium性能优化的终极实战指南 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of t…...

JetBrains IDE 试用期重置指南:3种简单方法恢复30天免费使用

JetBrains IDE 试用期重置指南&#xff1a;3种简单方法恢复30天免费使用 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在紧张的项目开发中&#xff0c;突然发现你的 JetBrains IDE&#xff08;如 Int…...

ncmdumpGUI:解锁网易云音乐ncm加密格式的图形化解决方案

ncmdumpGUI&#xff1a;解锁网易云音乐ncm加密格式的图形化解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 在数字音乐的世界里&#xff0c;格式兼容性…...

嵌入式追踪路由器(ETR)内存数据解码实战指南

1. 嵌入式追踪路由器(ETR)内存数据解码实战指南在嵌入式系统调试中&#xff0c;获取处理器执行踪迹(trace)是诊断复杂问题的关键手段。CoreSight SoC-600架构中的Trace Memory Controller(TMC)通过Embedded Trace Router(ETR)组件&#xff0c;可以将ATB(Advanced Trace Bus)追踪…...

【智能算法】长鼻浣熊优化算法(COA)实战:从自然行为到工程优化

1. 长鼻浣熊优化算法&#xff08;COA&#xff09;初探 第一次听说长鼻浣熊优化算法&#xff08;COA&#xff09;时&#xff0c;我正为一个工业参数优化问题头疼不已。传统遗传算法在这个问题上陷入了局部最优&#xff0c;粒子群优化又收敛得太快。直到看到2023年M Dehghani团队…...

SpringBoot3 + ShardingJDBC读写分离进阶:如何用AOP实现强制走主库(@Master注解实战)

SpringBoot3 ShardingJDBC读写分离进阶&#xff1a;如何用AOP实现强制走主库&#xff08;Master注解实战&#xff09; 在分布式数据库架构中&#xff0c;读写分离是提升系统吞吐量的常见方案。但当你的SpringBoot3应用已经配置好ShardingJDBC的基础读写分离功能后&#xff0c;…...

如何快速解锁WeMod高级功能:面向游戏玩家的完整免费方案

如何快速解锁WeMod高级功能&#xff1a;面向游戏玩家的完整免费方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否为WeMod免费版的诸多限制感到…...

基于Adafruit与CircuitPython的交互式光剑:从硬件选型到3D打印全流程解析

1. 项目概述&#xff1a;打造一把会“呼吸”的交互式光剑几年前&#xff0c;当我第一次在游戏里挥动《塞尔达传说》中的大师之剑时&#xff0c;就被那种兼具力量感与神圣感的视觉效果深深吸引。作为一个硬件创客&#xff0c;我一直在想&#xff0c;能不能把这种虚拟的体验带到现…...