描述:

  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 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. 
 
  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. 
代码:

  第一个背包是电影累加的时间,第二个背包是电影的数目。

  值得注意的是,电影的数目背包要求解必须是正好为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的更多相关文章

  1. hdu3496 二维01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3496 //刚看题目以为是简单的二维01背包,but,,有WA点.. 思路:题中说,只能买M ...

  2. *HDU3496 背包DP

    Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  3. hdu3496(二维背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3496 题意:题意是 DuoDuo 想看n部电影,但是被要求最长能看的总时间数为 L,每部电影有他的时长 ...

  4. dp之二维背包hdu3496

    题意:给你n张电影门票,但一次只可以买m张,并且你最多可以看L分钟,接下来是n场电影,每一场电影a分钟,b价值,要求恰好看m场电影所得到的最大价值,要是看不到m场电影,输出0: 思路:这个题目可以很明 ...

  5. HDU3496 Watch the Movie 背包

    题目大意:给你n张电影门票,但一次只可以买m张,并且你最多可以看L分钟,接下来是n场电影,每一场电影a分钟,b价值,要求恰好看m场电影所得到的最大价值,要是看不到m场电影,输出0. 三个限制: 选电影 ...

  6. dp之背包总结篇

    //新手DP学习中 = =!! 前言:背包问题在dp中可以说是经典,作为一个acmer,到现在才正式学习dp,可以说是比较失败的.我个人比较认同一点,想要做一个比较成功的acmer,dp.搜索.数学必 ...

随机推荐

  1. poj2196---Specialized Four-Digit Numbers

    #include <stdio.h> #include <stdlib.h> int main() { int i,sum,sumOfH,sumOfd,tmp1,tmp2,tm ...

  2. [LeetCode][Python]Regular Expression Matching

    # -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/regular-expression-matching/ Implement reg ...

  3. openstack 开发step-by-step

    Set up your Open Stack There are several ways to deploy openstack, Devstack is easily for developer ...

  4. 起启航-华夏互联与杰华网络合体结盟打造本土IT利舰

    北京时间2013年9月9日消息: 领先的软件研发企业上海逐一软件科技有限公司与专业互联网推广运营机构南昌杰华网络开发有限公司达成协议,双方将建立紧密合作关系与集团运营体制,并在未来的10个月内进行相应 ...

  5. UVAlive 2911 Maximum(贪心)

    Let x1, x2,..., xm be real numbers satisfying the following conditions: a) -xi ; b) x1 + x2 +...+ xm ...

  6. 【翻译】在Ext JS 5种使用ViewControllers

    原文:Using ViewControllers in Ext JS 5 简单介绍 在Ext JS 5中,在应用程序架构方面提供了一些令人兴奋的改进,如加入了ViewModels.MVVM以及view ...

  7. FPGA中浮点运算实现方法——定标

    有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一 ...

  8. hdu1285+hdu2467(拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. MYSQL知识点

    1.MYSQL为了可移植性,使用"--"做为注释,使用"/*!*/"表示可执行的注释.

  10. ubuntu 源码安装 swig

    1. 下载 swig 源码 http://www.swig.org/survey.html 填写一个简单的问卷,即可进入 sourceforge 下载. 2. 安装 g++ sudo apt-get ...