HDU3496-Watch The Movie
描述:
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.
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.
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.
第一个背包是电影累加的时间,第二个背包是电影的数目。
值得注意的是,电影的数目背包要求解必须是正好为m,即“恰好被装满”,根据背包九讲,如果要求背包恰好装满,那么此时只有容量为0 的背包可以在什么也不装且价值为0 的情况下被“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态,应该被赋值为-∞ 了。
最后如果值为负数,说明无解。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include <math.h>
using namespace std;
#define N 105
#define M 1005
#define MAX 999999 int main(){
int tc;
int n,m,l;//n为物品个数,m为可买的数量最大值,l为时间累计最大值
int t[N],v[N],dp[M][N];//dp一维为时间,二维为数量
scanf("%d",&tc);
while( tc-- ){
scanf("%d%d%d",&n,&m,&l);
for( int i=;i<=n;i++ )
scanf("%d%d",&t[i],&v[i]);
for( int i=;i<=l;i++ ){
for( int j=;j<=m;j++ ){
if( j== )
dp[i][j]=;
else
dp[i][j]=-MAX;
}
} for( int i=;i<=n;i++ ){
for( int j=l;j>=t[i];j-- ){//时间
for( int k=m;k>=;k-- ){//数量
dp[j][k]=max(dp[j][k],dp[j-t[i]][k-]+v[i]);
}
}
}
if( dp[l][m]< ) dp[l][m]=;//为负代表没有解
printf("%d\n",dp[l][m]);
}
system("pause");
return ;
}
HDU3496-Watch The Movie的更多相关文章
- hdu3496 二维01背包
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3496 //刚看题目以为是简单的二维01背包,but,,有WA点.. 思路:题中说,只能买M ...
- *HDU3496 背包DP
Watch The Movie Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)T ...
- hdu3496(二维背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3496 题意:题意是 DuoDuo 想看n部电影,但是被要求最长能看的总时间数为 L,每部电影有他的时长 ...
- dp之二维背包hdu3496
题意:给你n张电影门票,但一次只可以买m张,并且你最多可以看L分钟,接下来是n场电影,每一场电影a分钟,b价值,要求恰好看m场电影所得到的最大价值,要是看不到m场电影,输出0: 思路:这个题目可以很明 ...
- HDU3496 Watch the Movie 背包
题目大意:给你n张电影门票,但一次只可以买m张,并且你最多可以看L分钟,接下来是n场电影,每一场电影a分钟,b价值,要求恰好看m场电影所得到的最大价值,要是看不到m场电影,输出0. 三个限制: 选电影 ...
- dp之背包总结篇
//新手DP学习中 = =!! 前言:背包问题在dp中可以说是经典,作为一个acmer,到现在才正式学习dp,可以说是比较失败的.我个人比较认同一点,想要做一个比较成功的acmer,dp.搜索.数学必 ...
随机推荐
- new Date().getTime()
new Date().getTime()获取当前时间戳; 不知道是毫秒级还是千分之一毫秒级别
- sqlite学习笔记4:表的创建和删除
前面做了那么多不就是为了数据弄几张表么.接下来看看怎么新建表. 一 新建表 基本的语法例如以下: CREATE TABLE database_name.table_name( column1 data ...
- 动态加载 js
要实现动态加载JS脚本有4种方法: 1.直接document.write <script language="javascript"> document.write(& ...
- 错误提示:在此上下文中不允许使用名称 "***"。有效表达式包括常量、 常量表达式和变量(在某些上下文中),不允许使用列名。
出现这种情况的原因,是因为在SQL语句的编写格式不正确. 事例展示: 错误: string sql = "insert into person ([name], sex, salary) v ...
- IOS开发——正则表达式验证手机号、密码
App的实际应用中,用户登陆功能基本是每个App都有需求的一个功能.而当前我们很常规的做法,就是让用户把手机号作为自己的用户名,而在注册获取短信验证码的过程中,我们首先要完成的一个步骤,就是校验用户的 ...
- c++ 调用DLL函数,出现错误
c++ 调用DLL函数,出现错误 Run-Time Check Failure #0 - The value of ESP was not properly saved across a funct ...
- 前端页面优化:javascript图片延迟加载
自己写了个简单的图片延迟加载小插件. 功能如下: 页面刷新,当前屏幕图片直接加载真实地址,body被卷去的部分和下方未显示的部分的img均加载通用图片如:loding.gif 随着屏幕上下滚动加载相应 ...
- Qt QToolTip 控件背景的 QSS 设置方法(摘抄)
Qt/C++/CSS: QTooltip stylesheet background colour Hi there, I've recently come across a problem deve ...
- BZOJ 1415: [Noi2005]聪聪和可可( 最短路 + 期望dp )
用最短路暴力搞出s(i, j)表示聪聪在i, 可可在j处时聪聪会走的路线. 然后就可以dp了, dp(i, j) = [ dp(s(s(i,j), j), j) + Σdp(s(s(i,j), j), ...
- 算法——A*——HDOJ:1813
Escape from Tetris Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...