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

UVa 259 Software Allocation

题目分析一个计算中心有101010台不同的计算机编号000至999每台计算机在同一时间只能运行一个应用程序。有262626种应用程序名称分别为A\texttt{A}A至Z\texttt{Z}Z。每天会有用户提交应用程序同一个应用程序可能被多个用户提交此时需要为每个用户分配一台不同的计算机来运行该应用程序。每天结束后文员会收集所有的应用程序并为每个应用程序列出可以运行的计算机列表然后尝试将每个应用程序分配到一个计算机上使得每台计算机最多只运行一个应用程序。输入文件每天包含一个或多个作业描述每个作业描述的格式为一个大写字母A∼Z\texttt{A} \sim \texttt{Z}A∼Z表示应用程序名称。一个数字1∼91 \sim 91∼9表示提交该应用程序的用户数量。一个空格字符。一个或多个不同的数字0∼90 \sim 90∼9表示该应用程序可以运行的计算机编号。一个分号;作为终止符。一个换行符。每天的不同作业描述之间由一个空行分隔。输入文件以文件结束符结束。输出要求如果能够成功分配则输出101010个字符分别对应计算机000至999上分配的应用程序用-表示该计算机未被分配任何应用程序否则输出一个感叹号!。解题思路问题本质这是一个典型的二分图匹配问题或者更具体地说是一个多重匹配问题。二分图的一侧是计算机节点共101010台。另一侧是应用程序实例节点。由于同一个应用程序可能有多个用户即多个实例我们需要将每个实例看作一个独立的节点。但实际上我们并不需要显式地创建所有实例节点。我们可以将每个应用程序的需求数量作为该应用程序节点的“容量”而计算机节点容量为111。这本质上是一个带容量限制的二分图匹配问题也称为bbb-匹配问题。可行分配的必要条件在开始匹配之前可以先进行一些快速判断以排除明显不可行的情况总实例数不超过计算机总数设S∑i025countiS \sum_{i0}^{25} count_iS∑i025​counti​其中counticount_icounti​是应用程序iii的用户数量。如果S10S 10S10则不可能分配成功因为只有101010台计算机。每个应用程序的可用计算机数量不少于其需求数量对于应用程序iii设cic_ici​为其可以运行的计算机数量如果counticicount_i c_icounti​ci​则也不可能分配成功。这两个条件是必要但不充分的还需要进一步的搜索或匹配算法来验证。算法选择由于数据规模很小计算机只有101010台应用程序只有262626种每个应用程序最多999个用户可以使用深度优先搜索DFS\texttt{DFS}DFS进行回溯求解。具体思路我们按计算机编号000到999的顺序进行决策。对于当前计算机index尝试为其分配一个尚未分配完的应用程序即该应用程序还有未分配的用户实例。如果某应用程序可以运行在当前计算机上即该计算机在其可用列表中并且该应用程序还有剩余需求则将当前计算机分配给该应用程序并递归处理下一台计算机。如果找不到合适的应用程序也可以选择将当前计算机留空不分配任何应用程序然后继续处理下一台计算机。当处理完所有101010台计算机后检查是否所有应用程序的需求都已满足。如果是则找到一组可行解。回溯优化的几个技巧全局变量记录解的状态使用found标志一旦找到解就立即停止搜索。剪枝在进入回溯之前先检查上述两个必要条件。按计算机顺序尝试由于计算机数量固定且很少按顺序分配是直观且高效的。使用candidates数组记录每个应用程序可以运行的计算机总数用于快速判断是否有足够资源。数据结构设计computer[10]一个向量数组computer[i]存储可以运行在计算机iii上的所有应用程序编号0∼250 \sim 250∼25。applications[26]存储每个应用程序的剩余需求数量。candidates[26]存储每个应用程序可以运行的计算机总数预处理时统计。solution[10]存储最终分配结果solution[i]表示计算机iii上运行的应用程序编号−1-1−1表示未分配。输入解析输入文件每天包含多行空行分隔不同的测试案例。解析规则如果读取到空行则执行当前已收集的所有作业描述的分配然后清空数据结构准备处理下一天。如果读取到非空行则解析该行的作业描述第一个字符是应用程序名称。第二个字符是用户数量数字字符。跳过空格后直到分号前的所有数字字符都是可运行的计算机编号。将该应用程序加入对应计算机的可用列表同时更新需求数量。注意输入文件最后可能没有空行所以在读取结束后还需要再调用一次分配函数。代码实现// Software Allocation// UVa ID: 259// Verdict: Accepted// Submission Date: 2016-05-12// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;vectorvectorintcomputer(10);// computer[i] 表示可以在计算机 i 上运行的所有应用程序编号vectorintapplications(26);// applications[i] 表示应用程序 i 当前的剩余需求数量vectorintcandidates(26);// candidates[i] 表示应用程序 i 可以运行的计算机总数vectorintsolution(10);// solution[i] 表示计算机 i 上分配的应用程序编号-1 表示未分配boolfoundfalse;// 是否已经找到可行解// 深度优先搜索回溯函数// index: 当前正在处理的计算机编号0 ~ 9voidbacktrack(intindex){// 已经找到解直接返回if(found)return;// 所有计算机都已处理完毕if(index10){// 检查是否所有应用程序的需求都已满足for(inti0;i26;i)if(applications[i]0)return;// 找到可行解输出结果foundtrue;for(inti0;i10;i){if(solution[i]-1)cout_;elsecout(char)(Asolution[i]);}coutendl;return;}// 尝试为当前计算机分配一个应用程序for(inti0;icomputer[index].size();i){intappcomputer[index][i];// 可以在该计算机上运行的应用程序if(applications[app]0){// 分配该应用程序到当前计算机applications[app]--;solution[index]app;backtrack(index1);// 处理下一台计算机// 回溯恢复状态solution[index]-1;applications[app];// 如果已经找到解立即返回if(found)return;}}// 当前计算机不分配任何应用程序留空backtrack(index1);}// 为当前测试案例进行分配voidallocate(){// 必要条件1应用程序实例总数不能超过计算机数量intcounter0;for(inti0;iapplications.size();i)counterapplications[i];if(counter10){cout!\n;return;}// 必要条件2每个应用程序的可用计算机数量不能少于其需求数量for(inti0;iapplications.size();i)if(applications[i]candidates[i]){cout!\n;return;}// 重置搜索状态并开始回溯foundfalse;fill(solution.begin(),solution.end(),-1);backtrack(0);// 如果回溯结束后仍未找到解则分配失败if(foundfalse)cout!\n;}intmain(){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);fill(candidates.begin(),candidates.end(),0);string line;while(getline(cin,line)){// 空行表示当前测试案例结束if(line.length()0){allocate();// 清空数据结构准备处理下一个测试案例for(inti0;icomputer.size();i)computer[i].clear();fill(applications.begin(),applications.end(),0);fill(candidates.begin(),candidates.end(),0);}else{// 解析作业描述行// 格式: 应用字母 数字 空格 计算机列表 分号charappLetterline[0];intcountline[1]-0;// 用户数量intappIndexappLetter-A;// 更新该应用程序的需求总数applications[appIndex]count;// 解析计算机列表从索引 3 开始直到分号前一个字符for(inti3;iline.length()-1;i){intcomputerIdline[i]-0;// 记录该计算机可以运行的应用程序computer[computerId].push_back(appIndex);// 统计该应用程序可以运行的计算机数量candidates[appIndex];}}}// 处理最后一个测试案例文件末尾可能没有空行allocate();return0;}总结本题的核心是一个小规模的多重二分图匹配问题。由于数据规模极小计算机101010台应用程序262626种使用DFS\texttt{DFS}DFS回溯即可高效求解。代码中通过两个必要条件进行快速剪枝进一步提高了效率。理解本题的关键在于将“每个应用程序可能有多个用户”这一需求转化为带有容量限制的匹配问题并利用回溯搜索找到一组可行分配。

相关文章:

UVa 259 Software Allocation

题目分析 一个计算中心有 101010 台不同的计算机(编号 000 至 999),每台计算机在同一时间只能运行一个应用程序。有 262626 种应用程序,名称分别为 A\texttt{A}A 至 Z\texttt{Z}Z。每天会有用户提交应用程序,同一个应用…...

3步找回密码:如何用ArchivePasswordTestTool解锁加密压缩包

3步找回密码:如何用ArchivePasswordTestTool解锁加密压缩包 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经面对一个…...

破冰总结:写给 QA 的一份 30 天 AI 技术转型学习路线图

写在前面:一个不得不面对的现实 打开招聘网站,搜索“高级QA工程师”,你会发现薪资最高的一批岗位都有同一个关键词:AI。不是指“用AI写测试用例”那种浮于表面的用法,而是要求你真正理解AI系统的工作原理、能评估模型输出质量、能设计对抗性测试方案、能把RAG管线部署到生…...

AI 会取代测试工程师吗?来看看最新“AI程序员”Devine的翻车现场

引言:一条被炒得过热的赛道 2024年3月,Cognition Labs发布了Devin——一款被官方冠以“世界首位AI软件工程师”头衔的产品。演示视频中,Devin自主浏览文档、编写代码、运行测试、提交PR,甚至能在Upwork上接单挣钱。资本市场迅速反应:Cognition Labs在A轮融资中拿到了2100…...

向量数据库是什么?Milvus 与 ChromaDB 在 AI 测试中的作用

导语:2025年,AI应用开发圈最火的两个关键词——RAG(检索增强生成)和向量数据库。你可能已经用LangChain搭过聊天机器人,用LlamaIndex建过知识库,但你有没有认真想过:那个默默躺在你架构图最底层的向量数据库,到底该选谁?Milvus还是ChromaDB?它们到底有什么区别?对你…...

从 LangChain 到 LangGraph:大语言模型应用开发框架极简史

大模型应用开发正经历一场静悄悄的革命——从“把LLM接进工作流”走向“为Agent构建操作系统”。作为这场革命的两大核心引擎,LangChain与LangGraph的故事,既是一部框架演进史,也是一部开发者认知升级史。 一、源起:一个框架的诞生与大模型开发的“蛮荒时代” 时间回到202…...

长期使用 Taotoken 后对账单追溯与成本分析的实际体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用 Taotoken 后对账单追溯与成本分析的实际体验 在项目开发中引入大模型能力后,成本控制与资源优化是团队负责人…...

ODT怎么转PDF?2026年实测5种转换方法与在线工具对比

ODT(OpenDocument Text)是开源办公软件默认的文档格式,但在实际工作和分享中,PDF的通用性和防篡改特性让它成为更优选择。很多人拿到ODT文件后都会面临同一个问题:怎样才能快速转成PDF?本文将从多个角度展示…...

TurboVNC终极指南:如何快速搭建高性能远程桌面系统

TurboVNC终极指南:如何快速搭建高性能远程桌面系统 【免费下载链接】turbovnc Main TurboVNC repository 项目地址: https://gitcode.com/gh_mirrors/tu/turbovnc TurboVNC是一个专为高性能图形应用优化的远程桌面解决方案,特别适合3D渲染、视频处…...

告别数据锁定:用youdaonote-pull实现有道云笔记的本地化自由

告别数据锁定:用youdaonote-pull实现有道云笔记的本地化自由 【免费下载链接】youdaonote-pull 📝 一个一键导出 / 备份「有道云笔记」所有笔记的 Python 脚本。 A Python script to export/backup all the notes of the "Youdao Note". 项目…...

如何5分钟实现桌面股票实时监控:TrafficMonitor股票插件完全指南

如何5分钟实现桌面股票实时监控:TrafficMonitor股票插件完全指南 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 还在为错过重要行情而烦恼吗?想在工作时…...

Word怎么转图片?免费在线转换工具对比|2026实用方案

Word文档转换为图片是职场和学习中常见的需求。无论是为了方便分享、制作演示素材,还是保护文档隐私,掌握多种转换方法都能大幅提升工作效率。本文将为你盘点2026年最实用的Word转图片在线工具,以及电脑和手机端的完整解决方案。为什么要把Wo…...

一个真实网工的一天

很多人对网络工程师的印象,还停留在“敲命令、配交换机、修Wi-Fi”。 但真正干过这行的人都知道,网络工程师这个职业,有时候像消防员,有时候像急诊医生。平时看起来风平浪静,一旦出问题,电话、消息、会议能在5分钟内同时炸开。 有人天天996,也有人慢慢开始“只做分内事…...

JMeter gRPC性能测试解决方案:微服务协议性能验证技术实现

JMeter gRPC性能测试解决方案:微服务协议性能验证技术实现 【免费下载链接】jmeter-grpc-request JMeter gRPC Request load test plugin for gRPC 项目地址: https://gitcode.com/gh_mirrors/jm/jmeter-grpc-request 随着微服务架构的普及,gRPC已…...

jor1k性能优化技巧:如何显著提升浏览器中Linux的运行速度

jor1k性能优化技巧:如何显著提升浏览器中Linux的运行速度 【免费下载链接】jor1k Online OR1K Emulator running Linux 项目地址: https://gitcode.com/gh_mirrors/jo/jor1k jor1k是一款能够在浏览器中运行Linux的在线OR1K模拟器,让用户无需本地安…...

大学生选择网络工程,后期就业方向有哪些?

每年高考填志愿那阵子,总有学弟学妹跑来问:"网络工程这个专业怎么样?毕业了好找工作吗?"说实话,这个问题不太好回答。不是方向少,而是方向太多,而且每个方向的天花板和薪资差距不小。 我当年也是稀里糊涂选的网络工程,入学才知道跟计算机科学不是一回事。但…...

PSLab Desktop性能优化:提升仪器响应速度与数据精度的终极指南

PSLab Desktop性能优化:提升仪器响应速度与数据精度的终极指南 【免费下载链接】pslab-desktop PSLab Desktop Application https://pslab.io 项目地址: https://gitcode.com/gh_mirrors/ps/pslab-desktop PSLab Desktop是一款强大的开源硬件实验平台应用程序…...

技术人如何应对职业倦怠?这4个方法让我重燃热情

一、软件测试从业者职业倦怠的“隐形陷阱”在互联网技术高速迭代的今天,软件测试从业者正面临着前所未有的职业压力。你是否也曾有过这样的时刻:盯着满屏的测试用例,手指机械地重复着点击操作,内心却毫无波澜;面对层出…...

如何实现EditorConfig-Sublime与VSCode、IntelliJ的无缝协同工作流

如何实现EditorConfig-Sublime与VSCode、IntelliJ的无缝协同工作流 【免费下载链接】editorconfig-sublime Sublime Text plugin for EditorConfig - Helps developers maintain consistent coding styles between different editors 项目地址: https://gitcode.com/gh_mirro…...

Cacti插件开发实战:从零开始创建自定义插件

Cacti插件开发实战:从零开始创建自定义插件 【免费下载链接】cacti Cacti ™ 项目地址: https://gitcode.com/gh_mirrors/ca/cacti Cacti是一款强大的网络监控和数据采集工具,通过插件系统可以轻松扩展其功能。本文将带你从零开始,掌握…...

从零到一:基于YOLOv8的AI自瞄终极指南

从零到一:基于YOLOv8的AI自瞄终极指南 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot 想象一下,你正在玩最喜欢的FPS游戏,敌人从掩体后一闪而过&…...

RetinaFace实战:10个技巧教你高效检测和提取人脸

RetinaFace实战:10个技巧教你高效检测和提取人脸 【免费下载链接】retinaface RetinaFace: Deep Face Detection Library for Python 项目地址: https://gitcode.com/gh_mirrors/re/retinaface RetinaFace是一个基于深度学习的Python人脸检测库,专…...

RustRedOps COM组件操作指南:从IActiveScript到IShellDispatch的完整示例

RustRedOps COM组件操作指南:从IActiveScript到IShellDispatch的完整示例 【免费下载链接】RustRedOps RustRedOps is a repository for advanced Red Team techniques focused on Rust 项目地址: https://gitcode.com/gh_mirrors/ru/RustRedOps RustRedOps是…...

终极免费方案:5分钟解锁Microsoft 365完整功能,开源Ohook深度指南

终极免费方案:5分钟解锁Microsoft 365完整功能,开源Ohook深度指南 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.co…...

【独家首发】ElevenLabs未公开的粤语语音增强技巧:3个隐藏prompt指令+2个音频后处理脚本

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs广东话语音合成的技术边界与本地化挑战 ElevenLabs 作为全球领先的语音合成平台,其多语言支持能力广受关注,但粤语(广东话)尚未被官方列为正式…...

告别手动排班!明日方舟智能基建助手Arknights-Mower五分钟上手指南

告别手动排班!明日方舟智能基建助手Arknights-Mower五分钟上手指南 【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower 还在为《明日方舟》繁琐的基建管理而头疼吗?每天重复的…...

Orbit:革命性记忆增强平台的完整指南

Orbit:革命性记忆增强平台的完整指南 【免费下载链接】orbit Experimental spaced repetition platform for exploring ideas in memory augmentation and programmable attention 项目地址: https://gitcode.com/gh_mirrors/orbit1/orbit Orbit是一个革命性…...

ElevenLabs甘肃话语音合成技术解析(西北方言TTS工程化白皮书)

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs甘肃话语音合成技术概览 ElevenLabs 是全球领先的语音合成平台,原生支持英语、西班牙语、法语等数十种主流语言,但**不直接内置甘肃话(属中原官话秦陇片&a…...

ChromeKeePass深度解析:如何实现KeePass密码自动填充的强力浏览器扩展?

ChromeKeePass深度解析:如何实现KeePass密码自动填充的强力浏览器扩展? 【免费下载链接】ChromeKeePass Chrome extensions for automatically filling credentials from KeePass 项目地址: https://gitcode.com/gh_mirrors/ch/ChromeKeePass 你是…...

【ElevenLabs福建话语音落地实战】:20年语音AI专家亲授3大避坑指南与本地化部署全流程

更多请点击: https://codechina.net 第一章:ElevenLabs福建话语音落地的行业价值与技术定位 福建话(闽南语泉州/厦门腔)作为联合国教科文组织认定的“严重濒危语言”,其语音合成能力的工程化落地,已超越单…...