HDU 3496 Watch The Movie(看电影)

Time Limit: 1000MS   Memory Limit: 65536K


【Description】


【题目描述】


New semester is coming, and DuoDuo has to go to school tomorrow. She decides to have fun tonight and will be very busy after tonight. She like watch cartoon very much. So she wants her uncle to buy some movies and watch with her tonight. Her grandfather gave them L minutes to watch the cartoon. After that they have to go to sleep.

DuoDuo list N piece of movies from 1 to N. All of them are her favorite, and she wants her uncle buy for her. She give a value Vi (Vi > 0) of the N piece of movies. The higher value a movie gets shows that DuoDuo likes it more. Each movie has a time Ti to play over. If a movie DuoDuo choice to watch she won’t stop until it goes to end.

But there is a strange problem, the shop just sell M piece of movies (not less or more then), It is difficult for her uncle to make the decision. How to select M piece of movies from N piece of DVDs that DuoDuo want to get the highest value and the time they cost not more then L.

How clever you are! Please help DuoDuo’s uncle.


新学期即将开始,DuoDuo明天就要去学校了。想了想之后忙碌的生活,她还是决定在今晚找找乐子。DuoDuo十分喜欢欧美动画。因此她希望她叔叔买些回来晚上一起看。她爷爷却给她限定L分钟的时间看动画,之后必须去睡觉。

DuoDuo从1到N列了N部电影。对于她的最爱,统统都想要。她给出了对这N部电影的好感度Vi(Vi > 0)。数值越高,DuoDuo越喜欢。每部电影时长为Ti。DuoDuo一旦开始观看,就势必要看完。

但是奇葩的是,这家商店只出售M部影片(不多不少),这可难坏了她叔叔。如何才能在N部DuoDuo想要的DVDs中挑M部并且在不超过L的时间内收获最多的好感度?

聪明如你!定可助DuoDuo的叔叔一臂之力。


【Input】


【输入】


The first line of the input file contains a single integer t (1 ≤ t ≤ 10), the number of test cases, followed by input data for each test case:

The first line is: N(N <= 100),M(M<=N),L(L <= 1000)

N: the number of DVD that DuoDuo want buy.

M: the number of DVD that the shop can sale.

L: the longest time that her grandfather allowed to watch.

The second line to N+1 line, each line contain two numbers. The first number is the time of the ith DVD, and the second number is the value of ith DVD that DuoDuo rated.


输入数据的第一行是一个整数t(1 ≤ t ≤ 10),表示测试用例的数量,随后的每个测试用例:

第一行:N(N <= 100),M(M<=N),L(L <= 1000)

N:DuoDuo想买的DVD数量。

M:商店可出售的DVD数量。

L:她爷爷运行的最长观看时间。

第二到N+1行,每行两个数。第一个数字表示第i个DVD的时长,第二个数字表示DuoDuo对其的好感度。


【Output】


【输出】


Contain one number. (It is less then 2^31.)

The total value that DuoDuo can get tonight.

If DuoDuo can’t watch all of the movies that her uncle had bought for her, please output 0.


包含一个数字。(小于2^31。)

DuoDuo今晚收获的好感度。

如果DuoDuo不能看完她叔叔所买的电影则输出0。


【Sample Input - 输入样例】


【Sample Output - 输出样例】


1

3 2 10

11 100

1 2

9 1


3

【题解】

  二维01背包

  (之前为了看(qiang)着(po)爽(zheng)用vector来写,写着写着代码量比预期越来越高,于是默默地放弃了……)

  最后的好感度V太大,不过时间T和DVD的数量N都不大,可以用来当坐标轴。

  考虑到T或N在某一状态都可能相同,因此T与N都应该成为坐标轴,其值为V。

  这么看来就是一个二维的01背包了。 V[T][N]或V[N][T]怎么开都行。

【代码 C++】

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define time 1005
 5 #define cdSUM 105
 6 int main(){
 7     int ts, i, j, t, v, n, m, tLimt, cd[cdSUM][2], value[time][cdSUM];
 8     scanf("%d", &ts);
 9     while (ts--){
10         memset(value, 0, sizeof(value));
11         scanf("%d%d%d", &n, &m, &tLimt);
12         while (n--){
13             scanf("%d%d", &t, &v);
14             for (i = tLimt - 1; i > 0; --i){
15                 for (j = 0; j < m; ++j){
16                     if (value[i][j] && i + t <= tLimt){
17                         value[i + t][j + 1] = std::max(value[i][j] + v, value[i + t][j + 1]);
18                     }
19                 }
20             }
21             value[t][1] = std::max(v, value[t][1]);
22         }
23         for (i = v = 0; i <= tLimt; ++i) v = std::max(v, value[i][m]);
24         printf("%d\n", v);
25     }
26     return 0;
27 }
时间: 2024-10-09 22:44:41

HDU 3496 Watch The Movie(看电影)的相关文章

hdu 3496 Watch The Movie

题目: 链接:点击打开链接 题意: 想看n个电影,只能从中选m个,用l时间来看,这n个电影都要花费时间a[i]去看,也有一定的价值b[i],选取最大的价值. 思路: 这是二维费用背包,总时间l是背包容量,选m个是隐藏的花费,每个电影需要的时间a[i]也是花费.这样,状态转移方程就有了:dp[i][j] = max( dp[i][j] , dp[i-1][j-a[i]] + b[i] ),表示从n个电影中选i个电影花费j时间能够得到的总价值. 代码: #include<iostream> #in

【BZOJ2227】【ZJOI2011】看电影 [组合数学][质因数分解]

看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特殊,具体方式如下: 1. 电影院的座位共有K个,并被标号为1…K,每个人买完票后会被随机指定一个座位,具体来说是从1…K中等可能的随机选取一个正整数,设其为L.

看电影《无间道》

?现象 一段剧情: 卧底警察的档案保存在电脑里,保存在黄警司的个人电脑里. 说明不是在警署的网络系统里(不在服务器上).在一个独立的系统里,没有联网的话,当然没有 密码的情况下,这样最能保证卧底的身份. 分析: 香港警署是不会给一个警司这样的权利的-----一个人说了算,说谁是卧底,谁就是. 那么,如何保证有一天,这份档案需要被公布的时候,或者是需要给卧底重新翻牌的时候,如何确 保信息是真实有效的呢? 我想这是一个有点技术含量的技术问题. 看电影<无间道>,布布扣,bubuko.com

uestc 1135 邱老师看电影

邱老师看电影 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 一天邱老师心血来潮想去看电影,但是邱老师的妹子想去逛街,他们谁也没有办法说服对方,于是准备来玩一个游戏来决定听谁的. 邱老师找来w只白鼠和b只黑鼠,邱老师和妹子轮流从袋子里面抓老鼠,谁先抓到白色老鼠谁就赢. 但是有酱神在旁边捣乱,邱老师每抓一只老鼠出来,酱神就偷偷的也从里面抓一只出来,这3个人抓出来的老鼠都是随机的.

UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming&lt;Problem F&gt;

F - 邱老师看电影 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 一天邱老师心血来潮想去看电影,但是邱老师的妹子想去逛街,他们谁也没有办法说服对方,于是准备来玩一个游戏来决定听谁的. 邱老师找来w只白鼠和b只黑鼠,邱老师和妹子轮流从袋子里面抓老鼠,谁先抓到白色老鼠谁就赢. 但是有酱神在旁边捣乱,邱老师每抓一只老鼠出来,酱神就偷偷的也从里面抓一只出

开始ubuntu 14.04 的装X模式---终端模式下中文输入,听歌,上irc 开启framebuffer看电影 截图

先上图吧 卡卡的全是在tty1 下的操作,看电影,听歌,截图 ,看图  ,上irc 等等,相当适合在小白面前装屁! 需要安装的软件: 为了能正常显示中文:安装fbterm sudo apt-get install fbterm 因为ubuntu 14.04 的framebuffer 默认是开启的  是都开启 请查看 (ls /proc/|grep fb)所以不用做其他配置, 只要把用户加入video 组就可以了 否则会出现: "cann't open frame buffer device!&q

第一次约会看电影的细节 了解好男人的标准看他是否合格

1.由你选择看什么电影,配合你方便的时间,并且来接你,或者问你有没有时间吃晚饭,这个男生把你放在第一位,是个好男人哦!(100分) 2.先问你喜欢看什么类型的电影,然后搜索近期上映的电影,给你提供意见.这样的男生很细心,会帮你设想周到,比较尊重女生的意见.(90分以上) 咖啡厅可以说是约会圣地,不管是第一次约会,还是之后,咖啡厅都是非常值得去的地方,喝咖啡,听歌,聊聊各自的生活和理想,浪漫的感觉就这样出来了哦.电影院也是适合初次约会的好地方,挑选一部当下的非常热门的大片,挑一个情侣座,一起看电影

CDOJ 1135 邱老师看电影 概率dp

邱老师看电影 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 一天邱老师心血来潮想去看电影,但是邱老师的妹子想去逛街,他们谁也没有办法说服对方,于是准备来玩一个游戏来决定听谁的. 邱老师找来w只白鼠和b只黑鼠,邱老师和妹子轮流从袋子里面抓老鼠,谁先抓到白色老鼠谁就赢. 但是有酱神在旁边捣乱,邱老师每抓一只老鼠出来,酱神就偷偷的也从里面抓一只出来,这3

[ZJOI2011]看电影(MOVIE)

题目描述 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特殊,具体方式如下: 电影院的座位共有K个,并被标号为1...K,每个人买完票后会被随机指定一个座位,具体来说是从1...K中等可能的随机选取一个正整数,设其为L. 如果编号L的座位是空位,则这个座位就分配给此人,否则将L加一,继续前面的步骤. 如果在第二步中不存在编号L的座位,则该人只能站着看电影,即所谓的站票.

codevs——1570 去看电影

1570 去看电影 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 农夫约翰带着他的一些奶牛去看电影.而他的卡车最多只能载重C(100<=C<=5000)公斤,总体上来说,他想在不超过限制的前提下尽可能多地带走牛. 给出N (1 <= N <= 16)头奶牛的体重W_i,计算约翰可以带去看电影的奶牛的最大重量. 输入描述 Input Description * 第 1 行: 2个用空格隔开的整数 C , N