“破锣摇滚”乐队 Raucous Rockers



题目来源

洛谷P2736


题目描述

你刚刚继承了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权。你打算从中精选一些歌曲,发行M(1 <= M <= 20)张CD。每一张CD最多可以容纳T(1 <= T <= 20)分钟的音乐,一首歌不能分装在两张CD中。

不巧你是一位古典音乐迷,不懂如何判定这些歌的艺术价值。于是你决定根据以下标准进行选择:

1.歌曲必须按照创作的时间顺序在所有的CD盘上出现。(注:第i张盘的最后一首的创作时间要早于第i+1张盘的第一首)

2.选中的歌曲数目尽可能地多

输入输出格式

输入格式:
第一行: 三个整数:N, T, M.

第二行: N个整数,分别表示每首歌的长度,按创作时间顺序排列。

输出格式:
一个整数,表示可以装进M张CD盘的乐曲的最大数目。

输入输出样例

输入样例#1:
4 5 2
4 3 4 2
输出样例#1:
3
说明

题目翻译来自NOCOW。

USACO Training Section 3.4


解题思路

  • 维护一个二维数组f[i][j],表示在只使用前 i 首歌,总耗时 j 的情况下能够达到的最大的乐曲数目。那么最后只需要将 f[n][t * m] 输出即可(n 表示乐曲总数, t 表示每张唱片的时间, m 表示唱片的个数)
  • 由于同一首歌不能将其从中间分开后放在两个唱片内,因此 f[i][j] 的计算需要考虑以下三种情况:
    • 当不将第 i 首歌放入唱片时 f[i][j] = f[i - 1][j]
    • 当将第 i 首歌放入唱片时需要考虑以下两种情况:
      • 由于每张唱片的时间为 t ,那么通过计算可以得出 j % t 表示的是总时间 j 对应的最后一张不完整的唱片的时间。j / t 表示从时间 j 所包含的完整唱片的个数。
      • 如果第 i 首歌的时间大于 j % t ,说明第 i 首歌可以完整的放入最后一张不完整的唱片,此时 f[i][j] = f[i - 1][j - song[i]] + 1 (song[i] 表示第 i 首歌的时长,下同。)
      • 如果第 i 首歌的时间小于 j % t ,说明第 i 首歌由于时长过长而无法放入最后一张不完整的唱片,因此可以将其放入最后一张 完整的 唱片。此时f[i][j] = f[i - 1[j / t * t - song[i]] + 1
  • 因此总结出状态转移方程:
    当 jmodt≥song[i] j \bmod t \geq song[i]时

    f[i][j]=max(f[i−1][j],f[i−1][j−song[i]]+1)

    f[i][j] = max(f[i - 1][j],f[i - 1][j - song[i]] + 1)
    当 jmodt<song[i] j \bmod t 且 j÷t⋅t−song[i]≥0 j \div t \cdot t - song[i] \geq 0 时

    f[i][j]=max(f[i−1][j],f[i−1][j÷t⋅t−song[i]]+1)

    f[i][j] = max(f[i - 1][j],f[i - 1][j \div t \cdot t - song[i]] + 1)


源代码


二维数组

#include<iostream>
#include<cstdio>
using namespace std;
int n,t,m;//n首歌   每一张 t 分钟    m 张cd
int f[25][405];
int song[25];
int main(){freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);cin >> n >> t >> m;for(int i = 1;i <= n;i++)cin >> song[i];for(int i = 1;i <= n;i++) {for(int j = 1;j <= t * m;j++){f[i][j] = f[i - 1][j];if(j % t >= song[i])f[i][j] = max(f[i][j],f[i - 1][j - song[i]] + 1);else if (j / t * t - song[i] >= 0)f[i][j] = max(f[i][j],f[i - 1][j / t * t - song[i]] + 1);}}cout << f[n][t * m];return 0;
}

一维滚动数组

#include<iostream>
#include<cstdio>
using namespace std;
int n,t,m;//n首歌   每一张 t 分钟    m 张cd
int f[405];
int song[25];
int main(){freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);cin >> n >> t >> m;for(int i = 1;i <= n;i++)cin >> song[i];for(int i = 1;i <= n;i++) {for(int j = t * m;j >= 1;j--){f[j] = f[j];if(j % t >= song[i])f[j] = max(f[j],f[j - song[i]] + 1);else if (j / t * t - song[i] >= 0)f[j] = max(f[j],f[j / t * t - song[i]] + 1);}}cout << f[t * m];return 0;
}

“破锣摇滚”乐队 Raucous Rockers——动态规划相关推荐

  1. 【USACO题库】3.4.4 Raucous Rockers“破锣摇滚”乐队 题解

    [USACO题库]3.4.4 Raucous Rockers"破锣摇滚"乐队  题解 你刚刚继承了流行的"破锣摇滚"乐队录制的尚未发表的N(1 <= N ...

  2. 【原创】【动态规划】“破锣摇滚”乐队

    "破锣摇滚"乐队 时间限制: 1 Sec   内存限制: 64 MB 提交: 232   解决: 116 题目描述 你刚刚继承了流行的"破锣摇滚"乐队录制的尚未 ...

  3. 观“蓝野摇滚乐队”演唱会

         昨晚,在星光现场看了蓝野乐队的演出.这是一只来自内蒙古草原的蒙古摇滚乐队,成立于1998年.在内蒙以致蒙古国,这种乐队非常多,而蓝野乐队是我看过的最振奋人心的一支演唱组合.它将西方的摇滚乐与 ...

  4. java计算机毕业设计国外摇滚乐队交流和周边售卖系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计国外摇滚乐队交流和周边售卖系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计国外摇滚乐队交流和周边售卖系统MyBatis+系统+LW文档+源码+调试部署 ...

  5. 少儿创意学编程(Scratch基础篇):第1课——摇滚乐队

    <少儿创意学编程(Scratch基础篇)>,参考了英国公益组织发起的"code club(代码俱乐部)"--少儿免费学编程活动.愿为中国的少儿创意编程教育尽微薄之力,对 ...

  6. 《数字飙榜》精选欧美十支经典摇滚乐队

    数字飙榜欧美十大摇滚乐队第10名:Suede(山羊皮乐队) 上榜理由:英伦摇滚开出的靓丽并颓废的恶之花 经典指数:★★★      回顾英国独立乐团的发展与蓬勃,无可否认成立于1989年.以主唱兼灵魂 ...

  7. 我最烦的几个中国摇滚乐队或歌手

    唐朝 如果说中国摇滚打根就烂,那就是烂在唐朝上.首先,他们让当时对摇滚没什么认识的国人觉得摇滚就是金属,就是solo,就是大长头发.殊不知金属只是摇滚一个相当局限的侧面.再说创作能力,不可否认唐朝I ...

  8. 基于JAVA国外摇滚乐队交流和周边售卖系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA国外摇滚乐队交流和周边售卖系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA国外摇滚乐队交流和周边售卖系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: ...

  9. 重庆北大青鸟解放碑校区J12班 五杀摇滚乐队【权限管理系统】

    项目组名:五杀摇滚乐队 项目名称:权限管理系统 组内成员:重庆北大青鸟解放碑校区J12班汪东.罗.于豪.杨.陈*涛 项目背景:现如今,各大企业都有自己的官网以及内部系统,只要有用户和密码的系统都是会用 ...

最新文章

  1. 2013-7-12学习笔记
  2. mysql主键始终从小到大_Mysql从入门到入神之(四)B+树索引
  3. 脑电分析系列[MNE-Python-13]| bad通道介绍
  4. jstat 内存泄漏_一次Java内存泄漏的排查!要了自己的老命!
  5. 为什么优秀的程序员都写博客?谈谈我都是如何写作的
  6. linux系统清除日志,如何清除Linux系统日志
  7. springboot java获取版本号_深入实践Spring Boot 实战篇,大佬整理出的PDF文档
  8. Hive 大小表关联查询异常
  9. 【TI-ONE系列教程(一)】如何使用TI-ONE平台
  10. 怎么让某段css代码只在Chrome 火狐 edge 浏览器生效
  11. fgo服务器维护补偿,《FGO》:大版本维护补偿调整,部分石头将变成金苹果!
  12. 帝国cms 自动生成html,帝国cms二次开发用户访问自动生成html
  13. IDEA 从入门到踩坑(4)-No tests found for given includes 错误解决
  14. WORD VBA 操作WORD 文本框
  15. Python数据处理——pandas
  16. 《易经》全文翻译(值得收藏)
  17. 四点之间最短路(spfa+优先队列+枚举优化)UESTC1955喜马拉雅山上的猴子
  18. 什么是Unity技术美术
  19. 傅里叶变换-平稳信号
  20. P2P信贷平台业务数据分析

热门文章

  1. 华为OD机试 - 射击比赛(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
  2. Flutter组件ListView
  3. linux截取文件名某一段,Linux shell 之 提取文件名和目录名的一些方法总结
  4. 2021年科技型企业认定标准
  5. Outlook2016如何配置Exchange邮箱
  6. 潘石屹的SOHO小报猝死
  7. 9月心得感悟(欲戴王冠,必承其重。忙着成长,变得坚强)
  8. Javascript特效:星星海特效
  9. 夜莺(Flashcat)V6监控(四):categraf-mtail日志收集插件详解
  10. /usr/include/c++/7/bits中头文件被破坏/环境破坏