hdu1288Hat's Tea贪心

逆向贪心解决Hat’s Tea

题目如下:

Hat’s Tea

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2018 Accepted Submission(s): 465

Problem Description
Hat is a member of PG Studio. Hat codes a lot and so he often buys tea at tea vending machine. But the tea vending machine just eat coins and spit out tea, if you feed the machine more coins than the tea’s price and the machine will not spit out your change.
Your program will be given numbers and types of coins Hat has and the tea price. The tea vending machine accepts coins of values 1, 5, 10 RMB (Jiao). The program should output which coins Hat has to use paying the tea so that he uses as many coins as possible.


Input
Each line of the input contains four integer numbers separated by a single space describing one situation to solve. The first integer on the line N, , is the tea price in Jiao. Next four integers , , are the numbers of YiJiao (1 Jiao.RMB), WuJiao (5 Jiao.RMB), and ShiJiao (10 Jiao.RMB) in Hat’s valet. The last line of the input contains four zeros and no output should be generated for it.


Output
For each situation, your program should output one line containing the string ” T1 YiJiao, T2 WuJiao, and T3 ShiJiao “, where T1, T2, T3 are the numbers of coins of appropriate values Hat should use to pay the tea while using as many coins as possible. If Hat does not have enough coins to pay the tea exactly, your program should output “Hat cannot buy tea.”.


Sample Input
6653 226 72 352
578 5 127 951
0 0 0 0


Sample Output
Hat cannot buy tea.
3 YiJiao, 115 WuJiao, and 0 ShiJiao

代码如下:

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    //freopen("E:/acm/file/hdu1288.txt","r",stdin);
    int n,a1,a2,a3;
    while(cin>>n>>a1>>a2>>a3){
        if(!a1 && !a2 && !a3 && !n)break;
        int rest = a1+a2*5+a3*10 - n;
        if(rest < 0){
            cout<<"Hat cannot buy tea."<<endl;
            continue;
        }

        int b1,b2,b3;
        b3 = min(rest/10,a3);
        rest -= b3*10;
        b2 = min(rest/5,a2);
        rest -= b2*5;
        b1 = min(rest,a1);
        rest -= b1;

        a3 -= b3;
        a2 -= b2;
        a1 -= b1;
        if(rest != 0)
            cout<<"Hat cannot buy tea."<<endl;
        else
            cout<<a1<<" YiJiao, "<<a2<<" WuJiao, and "<<a3<<" ShiJiao"<<endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值