https://www.luogu.com.cn/problem/P2736
题意
给定 N(1≤N≤20)N(1\leq N\leq 20)N(1≤N≤20) 首歌,从中选出若干首歌曲,发行 M(1≤M≤20)M(1\leq M\leq 20)M(1≤M≤20) 张 CD。
每张 CD 最多容纳 T(1≤T≤20)T(1\leq T\leq 20)T(1≤T≤20) 分钟的音乐,一首歌不能分装在两张 CD 中。CD 数量可以用完,也可以不用完。

根据以下标准进行选择:

  1. 歌曲必须按照创作的时间顺序在所有的 CD 盘上出现。(注:第 iii 张盘的最后一首的创作时间要早于第 i+1i+1i+1 张盘的第一首)
  2. 选中的歌曲数目尽可能地多。

问,能够装进 MMM 张 CD 的最多歌曲数量?

思路
“歌曲必须按照创作的时间顺序在所有的 CD 盘上出现” 这个条件说明不能直接贪心。
考虑用dp,当前容量中最多能够存储的歌曲数量从减掉当前歌曲大小的容量来转移。
而 “一首歌不能分装在两张 CD 中” 这个条件就说明不能简单的从上一个容量来转移,还需要考虑是否分装在两张中。

所以,定义状态 f[i, j, k] 表示,对于前 i 首歌曲,用前 j 张 CD 外加 k 分钟,能够容纳的最多歌曲数量。
那么最终的状态就为 f[n, m, 0]

状态转移:

  • 首先继承上一位置的状态:f[i, j, k] = f[i-1, j, k]
  • 当外加的 k 分钟大于当前歌曲大小时,就可以从 f[i-1, j, k-a[i] 来转移:f[i, j, k] = f[i-1, j, k-a[i]] + 1
  • 否则,就需要存储在上一张唱片中,从 f[i-1, j-1, t-a[i]] 来转移:f[i, j, k] = f[i-1, j-1, t-a[i]] + 1

Code

#include<bits/stdc++.h>
using namespace std;const int N = 210, mod = 1e9+7;
int T, n, m;
int a[N];
int f[N][N][N];signed main(){int t;cin >> n >> t >> m;for(int i=1;i<=n;i++) cin >> a[i];for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){for(int k=0;k<=t;k++){f[i][j][k] = f[i-1][j][k];if(k>=a[i]) f[i][j][k] = max(f[i][j][k], f[i-1][j][k-a[i]] + 1); else if(t-a[i] >= 0 && j >= 1) f[i][j][k] = max(f[i][j][k], f[i-1][j-1][t-a[i]] + 1);}}}cout << f[n][m][0];return 0;
}

经验
状态定义要敢想。

USACO3.4 “破锣摇滚”乐队 Raucous Rockers - DP相关推荐

  1. “破锣摇滚”乐队 Raucous Rockers——动态规划

    "破锣摇滚"乐队 Raucous Rockers 题目来源 洛谷P2736 题目描述 你刚刚继承了流行的"破锣摇滚"乐队录制的尚未发表的N(1 <= N ...

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

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

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

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

  4. usaco Raucous Rockers(dp)

    dp[i][j]表示到了第i张CD且第i张CD用了j分钟可以装的最多歌曲. /* ID:jinbo wu LANG:C++ TASK: rockers */ #include<bits/stdc ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. @vail 判断某字段在范围内_月经两三天就没了和五天以上才没有,哪个更好?怎么判断月经量...
  2. 人工智能带来的事业浪潮或将提前到来
  3. ARM通用NEON多媒体处理SIMD引擎
  4. android7.1.1大小,浅谈Android7.1.1 for 360 N5
  5. Qt for QNX
  6. day212223:线程、进程、协程
  7. 基础知识(十三)dlib python人脸检测 特征点定位
  8. davfs挂载与使用缺陷
  9. 文章下载:关于窗宽窗位调节非常有用的论文《DICOM 医学图像窗口变换的加速算法》...
  10. dcx矩阵 - 打表 - 找规律
  11. Day01_01_Linux_Ubuntu教程之Linux系统简介
  12. oracle归档日志 delete obsolete 保留一次全备,DELETE OBSOLETE不删除归档日志以及归档的备份集...
  13. 谈谈对Android音视频开发的探究
  14. 教你文本聚类(参考http://www.kuqin.com/searchengine/20080511/8323.html)
  15. 基于S3C2440丛SD卡启动WinCE(或其它程序)的实现
  16. MNF最小噪声分离变换
  17. c语言教程——简单易懂
  18. const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别
  19. 基于雷达的安防视频监控系统软件设计
  20. jQuery的滑动效果(slideDown(),slideUp(),slideToggle())的应用方法

热门文章

  1. 插件搜索我的第一个chrome插件
  2. 学校官网首界面 html
  3. javascript三角函数的使用
  4. JAVA / JS 中关于this和that
  5. uni-app:如何运行到微信小程序模拟器需要进行的配置项(一)
  6. 总结几个有关国家行政区划的问题
  7. 行政区域村级划分数据库_最新行政区划 省市区三级 街道乡镇四级 社区/村五级 每月更新(2020年12月版)...
  8. Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector 论文翻译
  9. 如何将其他注册商处的域名申请转出并转入阿里云(图文教程)
  10. 单片机实验(十二)单片机矩阵按键控制数码管