0/1背包问题-最少硬币

简单说下题目:

给定n中硬币,分别是1.5.10.25.50,求给定任一金额所用的最少硬币组合

做题思路:

先用最小的硬币来把所有金额填充(注意这个金额题目会有限制),然后再依次增大硬币的金额,来更新所用的硬币数量

代码:

#include <bits/stdc++.h>

using namespace std;

int money[5] = {1,5,10,25,50};
int dp[300];
//求每个金额对应的最少硬币数量 

void solve(){
    for(int i = 0;i < 251; i++)
        dp[i] = INT_MAX; 
    dp[0] = 0;
    for(int i = 0;i < 5; i++){
        for(int j = money[i];j < 251; j++){
            dp[j] = min(dp[j],dp[j-money[i]]+1);
        }
    }
} 

int main()
{
    int n;
    solve();
    while(cin>>n){
        cout<<dp[n]<<endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/jingshixin/p/12304124.html