最少硬币问题 贪心

 
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

 //    题目:
//有1元,5元,10元。50元,100元,500元的硬币各C1,C5,C10,C100  C500枚。
//现在要用这些硬币来支付A元,最少需要多少枚硬币?

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include 
using namespace std;
const int V[6]={1,5,10,50,100,500};   //硬币面值
int C[6],A;
void Solve()
{
    int ans=0;         //记录硬币数量
    for(int i=5;i>=0;i--)
    {
        int t=min(A/V[i], C[i]); //A/V[i] 表示当前可以取多少V[i]面值的硬币数量
		//然后min取A/V[i] 和硬币数的最小值 就是比较可取的当前最大面值硬币数和硬币数量作比较
        A-=t*V[i];  //更新A的值
        ans+=t;  //记录硬币数量
    }
    printf("%d\n",ans); //输出硬币的总数ans
}
int main()
{
    cin>>C[0]>>C[1]>>C[2]>>C[3]>>C[4]>>C[5]>>A; // 分别输入不同面值的硬币数量
    Solve();
    return 0;
}




你可能感兴趣的:(ACM:贪心)