当前位置:网站首页>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;
}
经验
状态定义要敢想。
边栏推荐
- 解决Thinkphp框架应用目录下数据库配置信息修改后依然按默认方式连接
- Redis cluster simulated message queue
- ACM getting started Day1
- C language OJ gets PE, OJ of ACM introduction~
- - Oui. Net Distributed Transaction and Landing Solution
- Elk distributed log analysis system deployment (Huawei cloud)
- c——顺序结构
- 随机数生成的四种方法|Random|Math|ThreadLocalRandom|SecurityRandom
- 如何安全快速地从 Centos迁移到openEuler
- Debezium series: parsing the default value character set
猜你喜欢
Let's talk about threadlocalinsecurerandom
Autumn byte interviewer asked you any questions? In fact, you have stepped on thunder
Go language | 02 for loop and the use of common functions
S7-200smart uses V90 Modbus communication control library to control the specific methods and steps of V90 servo
2023年深圳市绿色低碳产业扶持计划申报指南
SecureRandom那些事|真伪随机数
微信小程序正则表达式提取链接
Leetcode brush question: binary tree 13 (the same tree)
解决Thinkphp框架应用目录下数据库配置信息修改后依然按默认方式连接
深度学习 卷积神经网络(CNN)基础
随机推荐
Complete interview questions for interviewers and senior Android engineers in front-line Internet enterprises
JS implementation prohibits web page zooming (ctrl+ mouse, +, - zooming effective pro test)
【数字IC验证快速入门】8、数字IC中的典型电路及其对应的Verilog描述方法
[C language] three implementations of quick sorting and optimization details
Using repositoryprovider to simplify the value passing of parent-child components
浮动元素与父级、兄弟盒子的关系
【c语言】归并排序
港股将迎“最牛十元店“,名创优品能借IPO突围?
DP: tree DP
Android interview classic, 2022 Android interview written examination summary
零道云新UI设计中
函数的概念及语法
c——顺序结构
[hard core dry goods] which company is better in data analysis? Choose pandas or SQL
JVMRandom不可设置种子|问题追溯|源码追溯
leetcode刷题:二叉树13(相同的树)
ICTCLAS word Lucene 4.9 binding
挖财钱堂教育靠谱安全吗?
浅浅的谈一下ThreadLocalInsecureRandom
.Net分布式事務及落地解决方案