【HDU-3348】coins

88 阅读1分钟
题意

给1,5,10,50,100面值的钞票个a张,求得到p的最小张数和最大张数,

不能则输出-1.

 

样例
Sample Input
3
33 6 6 6 6 6
10 10 10 10 10 10
11 0 1 20 20 20

Sample Output
6 9
1 10
-1 -1

 



 

AC代码
#include <iostream>
#include<algorithm>

using namespace std;

int value[5]={1,5,10,50,100};
int mixcoin(long long money,long long count[])
{
    long long ans=0;
    for(int i=4;i>=0;i--)
    {
        long long c=min(money/value[i],count[i]);
        money-=c*value[i];
        ans+=c;
    }
        if (money>0)
            return -1;
        else
            return ans;
}
/*
int maxcoin(int money,int count[])
{
    int sum=0;
    for(int i=0;i<5;i++)
    {
        int c=min(money/value[i],count[i]);
        money-=c*value[i];
        if(i<4)
        {
            if(money%value[i+1]!=0)
            {
                money+=c*value[i];
                for(int j=count[i];j>0;j--)  
                //这里的j不能位0,如果为0,则会发生除0错误
                {
                    if(money%(j*value[i])==0)
                    {
                        c=j;
                        money-=c*value[i];
                        break;
                    }
                }
            }
        }
        sum+=c;
    }
        if (money>0)
            return -1;
        else
            return sum;
}
*/
int main()
{
    long long n,money,count[1001];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        long long summoney=0,sumcount=0;
        cin>>money;                       //支付的钱数
        for(int j=0;j<5;j++)
        {
            cin>>count[j];
            summoney+=count[j]*value[j];  //所拥有的钱的总数
            sumcount+=count[j];           //纸币总数量
        }
        if(summoney<money)
        {
            cout<<"-1 -1"<<endl;
            continue;   //这里是continue,不是return 0
        }
        cout<<mixcoin(money,count)<<" ";  //所花费的最小数量的纸币

        //计算最大数量就是(纸币总数量)减去(所拥有的钱的总数减去支付的钱数)所花费的最小数量的纸币。
        if(mixcoin(summoney-money,count)!=-1)
            cout<<sumcount-mixcoin(summoney-money,count)<<endl;
        else
            cout<<"-1"<<endl;
    }
    return 0;
}


 

题源:acm.hdu.edu.cn/showproblem…