当前位置:网站首页>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;
}
经验
状态定义要敢想。
边栏推荐
- Hong Kong stocks will welcome the "best ten yuan store". Can famous creative products break through through the IPO?
- Leetcode brush question: binary tree 14 (sum of left leaves)
- Tasks in GStreamer
- Common operators and operator priority
- 使用 RepositoryProvider简化父子组件的传值
- Win10 x64环境下基于VS2017和cmake-gui配置使用zxing以及opencv,并实现data metrix码的简单检测
- Is it safe for CICC fortune to open an account online?
- 期货如何网上开户?安不安全?
- DP:树DP
- 解决php无法将string转换为json的办法
猜你喜欢

使用 RepositoryProvider简化父子组件的传值

淺淺的談一下ThreadLocalInsecureRandom

JVMRandom不可设置种子|问题追溯|源码追溯

Go language | 01 wsl+vscode environment construction pit avoidance Guide

B站UP搭建世界首个纯红石神经网络、基于深度学习动作识别的色情检测、陈天奇《机器学编译MLC》课程进展、AI前沿论文 | ShowMeAI资讯日报 #07.05

关于BRAM IP复位的优先级

.Net分布式事務及落地解决方案

【数字IC验证快速入门】9、Verilog RTL设计必会的有限状态机(FSM)

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

【数字IC验证快速入门】7、验证岗位中必备的数字电路基础知识(含常见面试题)
随机推荐
Database logic processing function
再忙不能忘安全
After 95, Alibaba P7 published the payroll: it's really fragrant to make up this
Debezium series: idea integrates lexical and grammatical analysis ANTLR, and check the DDL, DML and other statements supported by debezium
Oracle-表空间管理
挖财钱堂教育靠谱安全吗?
A solution to PHP's inability to convert strings into JSON
[C language] string function and Simulation Implementation strlen & strcpy & strcat & StrCmp
Debezium series: modify the source code to support UNIX_ timestamp() as DEFAULT value
How to select the Block Editor? Impression notes verse, notation, flowus
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
Go language | 02 for loop and the use of common functions
Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
强化学习-学习笔记4 | Actor-Critic
SecureRandom那些事|真伪随机数
【obs】libobs-winrt :CreateDispatcherQueueController
ACM getting started Day1
Summer Challenge harmonyos - realize message notification function
Leetcode: binary tree 15 (find the value in the lower left corner of the tree)
c——顺序结构