uva10465Homer Simpson

简介: 题意:HM先生喜欢吃汉堡,有两种汉堡,每种无限多个,吃完第一种的汉堡一个需要m时间,第二种需要n时间,HM先生饭量很大可以不停的吃,给定一个时间t,在t时间段内希望HM先生吃尽量多的汉堡,并且空余出来的时间要尽量少 分析:是一个只有两种元素的完全背包问题。

题意:HM先生喜欢吃汉堡,有两种汉堡,每种无限多个,吃完第一种的汉堡一个需要m时间,第二种需要n时间,HM先生饭量很大可以不停的吃,给定一个时间t,在t时间段内希望HM先生吃尽量多的汉堡,并且空余出来的时间要尽量少

分析:是一个只有两种元素的完全背包问题。

代码:

View Code
 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <string.h>
 4 using namespace std;
 5 #define DEBUG
 6 const int MAXN = 10000 + 10;
 7 int dp[MAXN];
 8 const int INF = 0x3f3f3f3f;
 9 int max(int a, int b){
10     return a>b?a:b;
11 }
12 int main(){
13 #ifndef DEBUG
14     freopen("in.txt", "r", stdin);
15 #endif
16     int c[2], t;
17     while(scanf("%d%d%d", &c[0], &c[1], &t)!=EOF){
18         int i, j;
19         for(i=1; i<MAXN; i++) dp[i]=-INF;
20         dp[0]=0;
21         for(i=0; i<2; i++)
22             for(j=c[i]; j<=t; j++)
23                 dp[j]=max(dp[j], dp[j-c[i]]+1);
24         j=t;
25         while(dp[j]<0) j--;            //比如输入5 5 4 那么dp[4]<0,需要处理
26         printf("%d", dp[j]);
27         if(j!=t) printf(" %d", t-j);
28         printf("\n");
29     }
30     return 0;
31 }

 

目录
相关文章
UVa11968 - In The Airport
UVa11968 - In The Airport
58 0
UVa10123 No Tipping
UVa10123 No Tipping
64 0
UVa11776 - Oh Your Royal Greediness!
UVa11776 - Oh Your Royal Greediness!
56 0
uva10112 Myacm Triangles
uva10112 Myacm Triangles
45 0
|
机器学习/深度学习
uva 11806 - Cheerleaders
点击打开链接 题意:在一个n行m列的矩形里面放k个相同的石子,要求第一行,最后一行,第一列,最后一列都要有石子。问有几种方法? 思路: 1 如果题目没有要求“第一行,最后一行,第一列,最后一列都要有石子”,那么答案就是C[n*m][k],我们用C[i][j]表示i个里面选择j个的组合数。
825 0
|
机器学习/深度学习
uva 11538 Chess Queen
点击打开链接 题意:给定一个n*m的矩阵,问有多少种方法放置两个相互攻击的皇后?规定在同一行同一列和同对角线的能够相互攻击 思路: 1 先考虑同一行的情况,n行就有n种情况,每一行有m*(m-1)种,总的是n*m*(m-1); 2 考虑同...
822 0