硬币问题 (动态规划)

有n种硬币,面值分别为v1,v2,....,vn,数量无限。输入非负整数s,选用硬币,使其和为s。要求输出最少的硬币组合。

#include<bits/stdc++.h>
using namespace std;
const int money=251;
const int value=5;
int type[value]={1,5,10,25,50};
int MIN[money];
void solve(){
    for(int k=0;k<money;k++)
    MIN[k]=INT_MAX;
    MIN[0]=0;
    for(int j=0;j<value;j++)
    for(int i=type[j];i<money;i++)
    MIN[i]=min(MIN[i],MIN[i-type[j]]+1);
} 
int main()
{
    int s;
    solve();
    while(cin>>s)
    cout<<MIN[s]<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/hrlsm/p/12770434.html