当前位置:网站首页>USACO3.4 “破锣摇滚”乐队 Raucous Rockers - DP
USACO3.4 “破锣摇滚”乐队 Raucous Rockers - DP
2022-07-05 20:08:00 【小酒窝.】
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 数量可以用完,也可以不用完。
根据以下标准进行选择:
- 歌曲必须按照创作的时间顺序在所有的 CD 盘上出现。(注:第 i i i 张盘的最后一首的创作时间要早于第 i + 1 i+1 i+1 张盘的第一首)
- 选中的歌曲数目尽可能地多。
问,能够装进 M M M 张 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;
}
经验
状态定义要敢想。
边栏推荐
- Interviewer: what is the internal implementation of set data types in redis?
- Process file and directory names
- 中金财富在网上开户安全吗?
- - Oui. Net Distributed Transaction and Landing Solution
- MySql的root密码忘记该怎么找回
- Hong Kong stocks will welcome the "best ten yuan store". Can famous creative products break through through the IPO?
- Two pits exported using easyexcel template (map empty data columns are disordered and nested objects are not supported)
- How to safely and quickly migrate from CentOS to openeuler
- gst-launch的-v参数
- Common operators and operator priority
猜你喜欢

Hong Kong stocks will welcome the "best ten yuan store". Can famous creative products break through through the IPO?

Scala基础【HelloWorld代码解析,变量和标识符】

Leetcode skimming: binary tree 12 (all paths of binary tree)

Add data to excel small and medium-sized cases through poi

95后阿里P7晒出工资单:狠补了这个,真香...

Debezium series: record the messages parsed by debezium and the solutions after the MariaDB database deletes multiple temporary tables

No matter how busy you are, you can't forget safety

Leetcode brush question: binary tree 14 (sum of left leaves)

leetcode刷题:二叉树10(完全二叉树的节点个数)

leetcode刷题:二叉树12(二叉树的所有路径)
随机推荐
Is it safe for Anxin securities to open an account online?
ICTCLAS word Lucene 4.9 binding
ICTCLAS用的字Lucene4.9捆绑
Based on vs2017 and cmake GUI configuration, zxing and opencv are used in win10 x64 environment, and simple detection of data matrix code is realized
ACM getting started Day1
ByteDance dev better technology salon was successfully held, and we joined hands with Huatai to share our experience in improving the efficiency of web research and development
Leetcode skimming: binary tree 12 (all paths of binary tree)
Leetcode brush question: binary tree 14 (sum of left leaves)
CADD课程学习(7)-- 模拟靶点和小分子相互作用 (半柔性对接 AutoDock)
The difference between ID selector and class selector
openh264解码数据流向分析
浮动元素与父级、兄弟盒子的关系
Notes on key vocabulary in the English original of the biography of jobs (12) [chapter ten & eleven]
2023年深圳市绿色低碳产业扶持计划申报指南
【数字IC验证快速入门】3、数字IC设计全流程介绍
Redis cluster simulated message queue
618 "low key" curtain call, how can baiqiushangmei join hands with the brand to cross the "uncertain era"?
third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl
Elk distributed log analysis system deployment (Huawei cloud)
股票开户哪里好?网上客户经理开户安全吗