【面试题--动态规划】最少硬币问题

看了下别人的前端 面经有这么一个题,他没搞出来,我看了眼,这是一道简单的完全背包问题。

没有题目链接,(没找到)

【题目描述】

n个不同面额硬币,m的金额,用最少的硬币 凑出m。

样例:

3 3

1 2 3 

答案:2

【代码】

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,inf=0x3f3f3f3f;
int a[N],n;
int dp[N],m;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]);

    memset(dp,inf,sizeof(dp));
    dp[0]=0;

    for(int i=1;i<=n;++i){
        for(int j=a[i];j<=m;++j){
            if(dp[j-a[i]]==inf) continue;
            dp[j]=min(dp[j],dp[j-a[i]]+1);
        }
    }
    printf("%d\n",dp[m]);
}
/*
3 6
1 2 3
*/

猜你喜欢

转载自blog.csdn.net/qq_41286356/article/details/106949876
今日推荐