题目

https://vjudge.net/problem/Uva-12563

给出n首歌和KTV的剩余时间T,因为KTV不会在时间到的时候立刻把歌切掉,而是会等它放完.而《劲歌金曲》长达678秒,因此你可以在从你喜欢的歌中选择一些,在时间结束前再唱一首《劲歌金曲》.

给出一种策略,使得唱的歌曲尽可能的多,在此前提下,使得唱的时间尽可能的长.

分析

和一般的01背包相比,本题有歌曲数目和歌曲长度两个优化目标,优先使歌曲数目最多,如果歌曲数目相同,则使歌曲长度最长.

因此可以写一个结构体描述上述属性

struct Node{
int num;//歌曲数量
int time;//歌曲总时间
bool operator < (Node n){
return num < n.num || (num==n.num && time < n.time);
}
};

其余与一般的01背包没有大的区别

AC代码

#include "bits/stdc++.h"
using namespace std;
int t[55];//记录每首歌的时间
const int maxn = 180*50+5;
struct Node{
int num;//歌曲数量
int time;//歌曲总时间
bool operator < (Node n){
return num < n.num || (num==n.num && time < n.time);
}
}dp[maxn]; int main(int argc, char const *argv[])
{
int C, n, T, i, j;
cin >> C;
int Case = 0;
while(Case++ < C){
cin >> n >> T;
for(i=0;i<n;i++){
cin >> t[i];
}
T--;
memset(dp, 0, sizeof(dp));
for(i=0;i<n;i++){
for(j=T;j>=t[i];j--){
Node temp;
temp.num = dp[j - t[i]].num + 1;
temp.time = dp[j - t[i]].time + t[i];
if(dp[j] < temp) dp[j] = temp;
}
}
cout << "Case " << Case << ": " << dp[T].num+1 << ' ' << dp[T].time+678 << endl;
} return 0;
}

UVa-12563 劲歌金曲的更多相关文章

  1. UVA 12563 劲歌金曲(01背包)

    劲歌金曲 [题目链接]劲歌金曲 [题目类型]01背包 &题解: 题意:求在给定时间内,最多能唱多少歌曲,在最多歌曲的情况下,使唱的时间最长. 该题类似于01背包问题,可用01背包问题的解题思路 ...

  2. UVa 12563 劲歌金曲(0-1背包)

    https://vjudge.net/problem/UVA-12563 题意: 在一定的时间内连续唱歌,最后一首唱11分钟18秒的劲歌金曲,问最多能长多长时间. 思路: 0-1背包问题,背包容量为t ...

  3. UVa 12563 劲歌金曲 刘汝佳第二版例题9-5;

    Problem J Jin Ge Jin Qu [h]ao (If you smiled when you see the title, this problem is for you ^_^) Fo ...

  4. UVA - 12563 Jin Ge Jin Qu hao(劲歌金曲)(0-1背包+滚动数组)

    题意:在KTV唱歌剩下的t秒时间内,决定选最爱的n首歌中的一部分歌,在时间结束之前唱一首时长678秒的<劲歌金曲>,使得唱的总曲目尽量多(包括<劲歌金曲>),在此前提下尽量晚的 ...

  5. 一道令人抓狂的零一背包变式 -- UVA 12563 Jin Ge Jin Qu hao

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  6. UVa 12563 Jin Ge Jin Qu hao【01背包】

    题意:给出t秒时间,n首歌分别的时间a[i],还给出一首长度为678的必须唱的劲歌金曲,问最多能够唱多少首歌(只要最后时间还剩余一秒,都可以将劲歌金曲唱完) 用dp[i]代表花费i时间时唱的歌的最大数 ...

  7. UVA - 12563 Jin Ge Jin Qu hao (01背包变形)

    此题应该注意两个点,首先背包容量应该缩减为t-1,因为最长的歌不超过三分钟,而劲歌金曲有678s,所以肯定要留出这个时间来.其次注意优先级,保证唱的歌曲数目最多,在此前提下尽可能的延长时间. 处理方法 ...

  8. Uva 12563 Jin Ge Jin Qu hao(01背包)

    题意: 假定你在唱KTV,还剩下t秒时间.你决定接下来唱你最喜爱的n首歌(不包含劲歌金曲)中的一些歌曲.在时间结束之前再唱一个劲歌金曲.使得唱的歌的总曲目尽量多以及时间总长度. 输入保证所有n+1曲子 ...

  9. Uva 12563,劲歌金曲,01背包

    题目链接:https://uva.onlinejudge.org/external/125/12563.pdf 题意:n首歌,每首歌的长度给出,还剩 t 秒钟,由于KTV不会在一首歌没有唱完的情况下切 ...

随机推荐

  1. json和pickle,XML

    什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON ...

  2. delphi string.split 按照任意字符串分割语句

    delphi string.split 按照任意字符串分割语句 1.就是把一个指定的字符串用指定的分割符号分割成多个子串,放入一个 TStringList 中 function ExtractStri ...

  3. python导入方法,软件目录

    软件目录 import os #print(__file__)#打印当前文件相对路径(文件,发要) import sys BASE_DIR=os.path.dirname(os.path.dirnam ...

  4. PHP 小知识

    -- 获取/设置响应的 HTTP 状态码 mixed http_response_code ([ int $response_code ] ) -- ... 操作符知道是什么么?看看 PHP 官方的 ...

  5. tensorflow入门笔记(一) tf.app.flags.FLAGS

    tf.app.flags.DEFINE_xxx()就是添加命令行的optional argument(可选参数),而tf.app.flags.FLAGS可以从对应的命令行参数取出参数.举例如下: FL ...

  6. Java如何编写Servlet程序

    一:Servlet Servlet是Java服务器端编程,不同于一般的Java应用程序,Servlet程序是运行在服务器上的,服务器有很多种,Tomcat只是其中一种. 例子: 在Eclipse中新建 ...

  7. java 大数据运算 BigInteger BigDecimal

    package cn.sasa.demo5; import java.math.BigDecimal; import java.math.BigInteger; public class BigDat ...

  8. JavaScript学习笔记--语法二

    条件判断与C语言一样 两种循环.for 循环和 while 循环,JavaScript不区分整数和浮点数,统一用Number表示,所以不是 int i var x = 0; var i; for (i ...

  9. 第四章:初识CSS3

    1.CSS规则由两部分构成,即选择器和声明器 声明必须放在{}中并且声明可以是一条或者多条 每条声明由一个属性和值构成,属性和值用冒号分开,每条语句用英文冒号分开 注意: css的最后一条声明,用以结 ...

  10. CentOS 7.2编译安装nginx1.10.3+MySQL5.5.38+PHP5.5.38

    1.关闭firewallad 关闭防火墙 systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.ser ...