首页 > 其他分享 >牛客CSP-J入门组 --- 简单的烦恼

牛客CSP-J入门组 --- 简单的烦恼

时间:2022-12-14 21:22:15浏览次数:60  
标签:int 听歌 首歌 --- 牛客 时间 播放 CSP dp

链接:https://ac.nowcoder.com/acm/problem/25184
来源:牛客网

题目描述

网易云音乐推出了定时关闭播放的功能,假设到了定时关闭播放的时间,当前这首歌还没有播放完,那就把它播放完关闭;如果到了定时关闭的时间,当前歌恰好播放完,那就立即关闭。xrc 在知道网易云这个算法后,想知道如果自己定时 t 时间后关闭播放,那最多能听多长时间的歌,已知 xrc 歌单中一共有 n 首歌,并且知道每首歌的播放时间分别是 a[i]。

输入描述:

第一行一个整数T(T <=
23),表示数据组数。

在每组输入数据中,第一行有两个正整数,n(n
<= 200), t(t <= 80000),分别表示歌单中歌曲的数目,和题目描述中的t。

第二行中有n个正整数a[i](a[i] <= 400),表示每首歌曲的时间长度。

输出描述:

对于每组数据,输出一个ans,表示最多能听多长时间的歌曲。
示例1

输入

复制
1
3 7
4 3 2

输出

复制
9

说明

先听第2首歌和第3首歌,最后播放第1首歌,在7单位时间后,第3首歌还没有播放完,所以要等第1首歌播放完,共能听9单位时间的歌。

思路:不管前面怎么听歌,只要能在最后时间听到最长的歌即可。换言之,在t-1时间听歌时长最大的同时,在t时间开始听最长的歌,两者时间之和,就是我们要求的最长听歌时间ans。

具体解决:按照思路,代码中,我们要找出max(a[i]),并求t-1时间最大听歌时长。找出最大的a[i]排序即可解决,求t-1时间最大听歌时长,就是求一个01背包问题:在n-1首歌中,装满一个容量为t-1的背包的最大价值,每首歌的价值为a[i]。(这道题很巧的是容量单位是时间,价值单位也是时间,按理说应该有简便算法,但是这样的01背包已经算简单的了!)

转移方程: dp[i] :i时间内的最大听歌时长 

 

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int T, n, t, ans;
int a[201], dp[800010];

void solve() {

    cin >> T;
    
    while (T -- ) {
        // 输入  
        cin >> n >> t;
        for (int i = 0; i < n; i ++) {
            cin >> a[i];
        }
            
        // 排序确定最长的歌 
        sort(a, a + n); 
    
        memset(dp, 0, sizeof(dp));
        
        for (int i = 0; i < n - 1; i ++) { // 前 n - 1首歌的最大时长  
            for (int j = t - 1; j >= a[i]; j --) {
                dp[j] = max(dp[j], dp[j - a[i]] + a[i]);
            }
        }
        
        // 更新ans
        ans = dp[t - 1] + a[n - 1];   // 容量为t-1的背包的最大值 + 最后(最长)一首歌时长
        
        cout << ans << endl; 
    }
    
    return; 
}

int main() {

    solve();
    
    return 0;
}

 

 

 

标签:int,听歌,首歌,---,牛客,时间,播放,CSP,dp
From: https://www.cnblogs.com/yumomo/p/16983572.html

相关文章

  • CSP2019游记
    Day0CSP模拟赛:t1就是模拟题t2是期望的线性性t3是状压dp,T3没调出来得分:100+100+0CSP-S-Day1一个小时做完了t1,t2看到t3,贪心的建个限制图可以做到n的4次方,莫名......
  • 01-彻底搞懂java的值传递
    01-彻底搞懂java的值传递在java的参数传递中,只有一种情况,就是值传递值传递指的是在方法中,会将原始变量拷贝一份出来,进行处理基本数据类型基本数据类型值就保存在变量......
  • 详解物理层-通信基础【王道计算机网络笔记】
    ![![[附件/Pastedimage20221120151810.png|100]]](https://img-blog.csdnimg.cn/6765bf898d2a41588eb9e60989ab40bf.png=x300)物理层接口特性物理层解决如何在连接各种......
  • ogg目标库应用进程异常,告警OGG-00519、ORA-02443
    问题描述:ogg目标库应用进程异常,告警OGG-00519、ORA-02443,如下所示:场景说明:源端表中存在一个约束,约束名为系统自定义,该约束在目标端未能查找,所以便在源库将其删除,结果就出现......
  • [LeetCode]003-无重复字符的最长子串
    >>>传送门题目给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例示例1输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",......
  • 网络编程1.4-端口-2022-12-14
     端口表示计算机一个程序的进程。  -不同的进程有不同的端口,端口号不能重复,用来区分软件 -被规定0-65535  -TCPUDP各为65535,两个类端口号可以相同端口......
  • 海量文本中挖掘人物关联关系核心技术介绍-桂洪冠
    在大数据时代,通过对目标人物的轨迹、通信、社交、出行、网络等多模态行为进行挖掘并建立人物画像模型,并依托人物基础特征和高层特征,实例化人物画像,支撑有关部门分析人员全方......
  • JavaScript学习--Item1 严格模式
    一、概述除了正常运行模式,ECMAscript5添加了第二种运行模式:“严格模式”(strictmode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。设立”严格模式”的目的,主要......
  • Maven实战 3 -- Maven项目构建2
    maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项目的过程。Jave项目JaveProject1、使用mvnarchetype:generate命令,......
  • 2022 ICPC 杭州站 K - Master of Both // Trie
    K-MasterofBoth题目来源:The2022ICPCAsiaHangzhouRegionalProgrammingContestK题目链接:https://codeforces.com/gym/104090/problem/K题意给定\(n\)个仅......