硬币问题 (动态规划)

有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;
}

 

posted on 2020-04-24 21:41  YovM_21  阅读(200)  评论(0编辑  收藏  举报

导航