这个题目的题意的理解起来应该不苦难。这个人吃汉堡,有两种,一种吃下去要m分钟,另外一种吃下去要n分钟,给了t的时间如果他必须浪费时间,就要喝啤酒(注意题目后面有一句It is preferable that Homer drinks as little beer as possible),也就是说,在最好不要浪费时间的情况下,问他最多吃下去多少汉堡。所以就必须先来考虑时间,再来考虑吃下去汉堡的个数了。
下面贴代码(当然,我写的好像有点罗嗦):
View Code
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int num[10010],t[10010]; 5 int main() 6 { 7 int a,b,i,total; 8 while(cin>>a>>b>>total) 9 { 10 memset(num,0,sizeof(num)); 11 memset(t,0,sizeof(t)); 12 for(i = a;i <= total;i++) 13 { 14 t[i] = t[i - a] + a; 15 num[i] = num[i - a] + 1; 16 } 17 for(i = b;i <= total;i++) 18 { 19 if(t[i - b] + b > t[i]) 20 { 21 t[i] = t[i - b] + b; 22 num[i] = num[i - b] + 1; 23 } 24 else if(t[i - b] + b == t[i] && num[i - b] + 1 > num[i]) 25 num[i] = num[i - b] + 1; 26 } 27 if(total == t[total]) 28 cout<<num[total]<<endl; 29 else 30 cout<<num[total]<<" "<<total - t[total]<<endl; 31 } 32 return 0; 33 }