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

UVa 473 Raucous Rockers

题目描述

题目要求将nnn首歌曲按创作时间顺序分配到mmm张光盘上,每张光盘容量为ttt分钟,每首歌曲不能拆分到多张光盘。目标是最大化被选中的歌曲数量。

输入格式

第一行一个整数DDD,表示数据集的个数,后面跟一个空行。每个数据集的第一行包含三个整数nnntttmmm。第二行包含nnn个整数,表示每首歌曲的长度(单位为分钟)。每个ti<tt_i < tti<t,且∑ti>m×t\sum t_i > m \times tti>m×t。两个连续数据集之间由一个空行分隔。

输出格式

对于每个数据集,输出一行一个整数,表示能放入mmm张光盘的最大歌曲数量。两个连续数据集的输出之间由一个空行分隔。

样例

输入

2 10 5 3 3,5,1,2,3,5,4,1,1,5 1 1 1 1

输出

6 1

题目分析

本题的核心是在保持歌曲原有顺序的前提下,将它们分配到mmm个容量为ttt的背包中,使得放入的歌曲数量最多。这是一个多维背包问题,可以用动态规划求解。

动态规划定义

dp[i][j][k]\textit{dp}[i][j][k]dp[i][j][k]表示考虑前iii首歌曲,使用了jjj张光盘,且当前光盘已用容量为kkk时,能够放入的最大歌曲数量。但这样状态数为n×m×tn \times m \times tn×m×tnnn最大未知,t≤?t \le ?t?,可接受。

状态转移:

  • 不选第iii首歌曲:dp[i][j][k]=max⁡(dp[i][j][k],dp[i−1][j][k])\textit{dp}[i][j][k] = \max(\textit{dp}[i][j][k], \textit{dp}[i-1][j][k])dp[i][j][k]=max(dp[i][j][k],dp[i1][j][k])
  • 选第iii首歌曲:
    • 若放入当前光盘(k+ti≤tk + t_i \le tk+tit):dp[i][j][k+ti]=max⁡(dp[i][j][k+ti],dp[i−1][j][k]+1)\textit{dp}[i][j][k + t_i] = \max(\textit{dp}[i][j][k + t_i], \textit{dp}[i-1][j][k] + 1)dp[i][j][k+ti]=max(dp[i][j][k+ti],dp[i1][j][k]+1)
    • 若放入新光盘(j<mj < mj<m):dp[i][j+1][ti]=max⁡(dp[i][j+1][ti],dp[i−1][j][k]+1)\textit{dp}[i][j+1][t_i] = \max(\textit{dp}[i][j+1][t_i], \textit{dp}[i-1][j][k] + 1)dp[i][j+1][ti]=max(dp[i][j+1][ti],dp[i1][j][k]+1)

简化

由于nnnmmmttt的具体范围未给出,但ti<tt_i < tti<t,且∑ti>m×t\sum t_i > m \times tti>m×t,可以假设ttt不大。实际上,可以使用一维DP\texttt{DP}DP优化空间。

算法

  1. 初始化dp[0][0]=0\textit{dp}[0][0] = 0dp[0][0]=0,其他为−∞-\infty
  2. 遍历每首歌曲iii
    • 从后向前更新(避免同一首歌被多次使用):
      • 对于每张光盘jjj(从m−1m-1m1000),对于每个容量kkk(从t−tit - t_itti000),更新放入当前光盘的状态。
      • 对于每张光盘jjj(从m−1m-1m1000),对于每个容量kkk,更新放入新光盘的状态。
  3. 最终答案为max⁡0≤j≤m,0≤k≤tdp[j][k]\max_{0 \le j \le m, 0 \le k \le t} \textit{dp}[j][k]max0jm,0ktdp[j][k]

复杂度分析

时间复杂度O(n×m×t)O(n \times m \times t)O(n×m×t),空间复杂度O(m×t)O(m \times t)O(m×t)。对于合理范围内的nnnmmmttt,可接受。

代码实现

// Raucous Rockers// UVa ID: 473// Verdict: Accepted// Submission Date: 2025-12-03// UVa Run Time: 0.000s//// 版权所有(C)2025,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intdatasets;cin>>datasets;for(intds=0;ds<datasets;++ds){if(ds)cout<<'\n';intn,t,m;cin>>n>>t>>m;vector<int>songs(n);charcomma;for(inti=0;i<n;++i){cin>>songs[i];if(i<n-1)cin>>comma;}// dp[j][k]: 使用 j 张光盘,当前光盘已用 k 分钟时,最多歌曲数vector<vector<int>>dp(m+1,vector<int>(t+1,-1));dp[0][0]=0;for(inti=0;i<n;++i){intlength=songs[i];// 逆序更新,避免重复使用当前歌曲for(intj=m;j>=0;--j){for(intk=t;k>=0;--k){if(dp[j][k]<0)continue;// 尝试放入当前光盘if(k+length<=t){dp[j][k+length]=max(dp[j][k+length],dp[j][k]+1);}// 尝试放入新光盘if(j<m){dp[j+1][length]=max(dp[j+1][length],dp[j][k]+1);}}}}intans=0;for(intj=0;j<=m;++j){for(intk=0;k<=t;++k){ans=max(ans,dp[j][k]);}}cout<<ans<<'\n';}return0;}
http://www.gsyq.cn/news/1519449.html

相关文章:

  • 怎么编写一个 Shell 脚本,从 `/var/log/nginx/access.log` 中统计访问量最高的前 3 个 IP,并按访问次数从高到低输出
  • 3分钟搞定Axure中文界面:告别英文烦恼的终极指南
  • WechatBakTool终极指南:3步轻松备份你的微信聊天记录
  • 别再死记真值表了!通过Multisim仿真,直观理解74LS148优先编码器的工作原理
  • MC68341芯片选与RTC配置实战:从寄存器原理到嵌入式系统稳定设计
  • Windows窗口置顶神器:3步解决多任务窗口遮挡难题的完整指南
  • 怎么编写一个shell脚本,用户输入软件包自动识别系统,然后安装
  • 2026手机端外语口音语音克隆工具实测:口音还原、语种覆盖选型指南 - GrowthUME
  • FPGA时序收敛实战:手把手教你用Vivado正确处理时钟域与生成时钟
  • 5G URLLC低时延保障:深入解析PUSCH Repetition Type B与无效符号处理机制
  • 2026科技驱动型EMBA客观测评:理性选型与项目对比 - 品牌2026推荐
  • 别再只盯着准确率了!手把手教你用颜色矩+SVM做图像分类时的模型调优与评估陷阱
  • MyBatis-Plus动态查询实战:用QueryWrapper的and()和or()优雅构建商品筛选与权限查询
  • 高数期末救命!72道不定积分题里,这5类‘换元法’套路必须掌握(附解题模板)
  • 终端与IDE形态的vibe coding实测:两款AI编程工具迭代能力对比
  • 深度解析发酵饲料:核心原理、应用价值与养殖实践 - 速递信息
  • 2026靠前境内外EMBA客观测评:理性择校全指南 - 品牌2026推荐
  • 2026年6月在线浊度计知名品牌排行榜:国产力量崛起与技术格局重塑 - 液体流量液位品牌推荐
  • ParsecVDisplay虚拟显示器实战指南:3个高级技巧打造专业级多屏工作站
  • i.MX21 GPIO与PWM寄存器深度解析与嵌入式开发实战指南
  • 从审核员视角看漏洞:拆解CNVD收录标准,理解安全风险的‘轻重缓急’
  • 宜宾业之峰装饰官方联系方式 咨询电话 官方网站 官网 - 速递信息
  • Unsloth+AutoAWQ+SGLang:LLM轻量化落地三件套实战指南
  • 微信聊天记录备份工具:如何安全迁移你的重要对话数据
  • Cursor免费试用终极解决方案:三步快速重置机器码恢复AI编程助手功能
  • 2026年西安PMP培训1980元课程怎么咨询?试听课、35学时和报考指导入口,众智商学院官网400冯老师 - 众智商学院职业教育
  • DSGE模型终极指南:如何从零开始掌握宏观经济建模的40个经典案例
  • 3分钟搞定学术付费墙:Unpaywall浏览器扩展完整使用指南
  • Linux内核学习轨迹第七部: 多队列块层blk-mq深度拆解(第四节)
  • 英雄联盟玩家如何通过本地化工具提升80%游戏效率:League Akari全面解析