UVa 10465 Homer Simpson(DP 完全背包)



题意 霍默辛普森吃汉堡  有两种汉堡  一中吃一个需要m分钟  另一种吃一个需要n分钟  他共有t分钟时间   
要我们输出他在尽量用掉所有时间的前提下最多能吃多少个汉堡  如果时间无法用完  输出他吃的汉堡数和剩余喝酒的时间

很明显的完全背包问题  求两次  一次对个数  一次对时间就行了   时间用不完的情况下就输出时间的

d1为个数的  d2为时间的  dt保存时间

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10005
using namespace std;
int w[2],t,d1[maxn],d2[maxn],dt[maxn];
int main()
{
    while (scanf("%d%d%d",&w[0],&w[1],&t)!=EOF)
    {
        memset(d1,0x8f,sizeof(d1));
        memset(dt,0,sizeof(dt));
        memset(d2,0,sizeof(d2));
        d1[0]=0;
        for(int i=0; i<2; ++i)
            for(int j=w[i]; j<=t; ++j)
            {
                d1[j]=max(d1[j],d1[j-w[i]]+1);
                if((dt[j]<dt[j-w[i]]+w[i])||((dt[j]==dt[j-w[i]]+w[i])&&(d2[j]<d2[j-w[i]]+1)))
                {
                    dt[j]=dt[j-w[i]]+w[i];
                    d2[j]=d2[j-w[i]]+1;
                }
            }
        if(dt[t]==t)
            printf("%d\n",d1[t]);
        else
            printf("%d %d\n",d2[t],t-dt[t]);
    }
    return 0;
}
Homer Simpson
 

Homer Simpson, a very smart guy, likes eating Krusty-burgers. It takes Homer m minutes to eat a Krusty- burger. However, there?s a new type of burger in Apu?s Kwik-e-Mart. Homer likes those too. It
takes him n minutes to eat one of these burgers. Given t minutes, you have to find out the maximum number of burgers Homer can eat without wasting any time. If he must waste time, he can have beer.

Input

Input consists of several test cases. Each test case consists of three integers m, n, t (0 < m,n,t < 10000). Input is terminated by EOF.

Output

For each test case, print in a single line the maximum number of burgers Homer can eat without having beer. If homer must have beer, then also print the time he gets for drinking, separated by a single space. It is preferable that Homer drinks as little beer
as possible.

Sample Input

3 5 54

3 5 55

Sample Output

18

17

时间: 2024-10-02 07:31:05

UVa 10465 Homer Simpson(DP 完全背包)的相关文章

UVa 10465 Homer Simpson(DP 全然背包)

 题意 霍默辛普森吃汉堡  有两种汉堡  一中吃一个须要m分钟  还有一种吃一个须要n分钟  他共同拥有t分钟时间    要我们输出他在尽量用掉全部时间的前提下最多能吃多少个汉堡  假设时间无法用完  输出他吃的汉堡数和剩余喝酒的时间 非常明显的全然背包问题  求两次  一次对个数  一次对时间即可了   时间用不完的情况下就输出时间的 d1为个数的  d2为时间的  dt保存时间 #include<cstdio> #include<cstring> #include<a

uva 10465 Homer Simpson (完全背包)

uva 10465 Homer Simpson 题目大意:有两种汉堡,给出吃每种汉堡的时间,以及总时间.求出在充分利用时间的前提下,能吃的最多的汉堡数量.当无法利用所有时间时,再在汉堡数量后面输出剩余的时间. 解题思路:完全背包. #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <cstdlib> typedef long lo

UVA 10465 Homer Simpson

在t分钟内吃两种耗时不同的汉堡,首先保证耗时最多,然后保证汉堡吃最多,最后剩下的时间喝酒 #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #inc

UVA 10465 Homer Simpson(完全背包: 二维目标条件)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1406 题意: 有两种汉堡包(汉堡数量无限多),第一种吃一个需要花n分钟,第二种吃一个需要花m分钟. 现在你有t分钟的时间, 问你最少浪费几分钟不能吃汉堡(你每次要么完整的吃完一个汉堡,要么不吃). 当吃汉堡花费的时间达到最大时, 问你最多能吃几个汉堡? 分析: 本题的限制条件是: 总时间&l

uva10465 - Homer Simpson(完全背包)

题目:10465 - Homer Simpson(完全背包) 题目大意:有个家伙很喜欢吃burger,现在有两种burger,然后给出吃这两种burger的时间,然后问你在指定的时间内,他能吃最多的burger的个数是多少.如果不能够用完的话,那么剩余时间就拿来喝水,要求喝水的时间尽量短. 解题思路:完全背包.状态转移方程:dp[t]在t时间内能吃的最多的burger数目.dp[t + v[i]] = max (dp[t + v[i]],dp[t] + 1). 代码: #include <cst

[UVA 12589]Learning Vector[DP]

题目链接:[UVA 12589]Learning Vector[DP] 题意分析:给出n个矢量,从中选择k个,以坐标原点为起点,收尾相连,问:这样的k个周围相连矢量与x轴围成图形的最大面积的两倍是多少? 解题思路:考虑状态:dp[id][pick][h]代表到第id个矢量为止,选择pick个矢量离最大面积还差多少,h为当前图形最右端高度.具体转移看代码. 这里着重说一下为什么要对这些矢量按斜率进行排序: 首先,整个求解过程其实就是在暴力枚举这些向量的组合,只不过采用了记忆化搜索优化. 其次,对于

poj1384——dp,完全背包

POJ 1384  dp,完全背包 Piggy-Bank Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8404   Accepted: 4082 Description Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this a

USACO Money Systems Dp 01背包

一道经典的Dp..01背包 定义dp[i] 为需要构造的数字为i 的所有方法数 一开始的时候是这么想的 for(i = 1; i <= N; ++i){ for(j = 1; j <= V; ++j){ if(i - a[j] > 0){ dp[i] += dp[i - a[j]]; } } } 状态存在冗余, 输出的时候答案肯定不对 但只需要改一下两个for循环的顺序即可. Source Code: /* ID: wushuai2 PROG: money LANG: C++ */ //

hdu4003 树形dp+分组背包

http://acm.hdu.edu.cn/showproblem.php?pid=4003 Problem Description Humans have discovered a kind of new metal mineral on Mars which are distributed in point‐like with paths connecting each of them which formed a tree. Now Humans launches k robots on