给出了一组硬币。最少需要多少个硬币才能达到一个硬币只能使用一次的数量

问题描述 投票:0回答:0
#include<bits/stdc++.h>
using namespace std;
#define ll long long
void fun(int idx,int n,int TA,int used,int &mini,int coins[])
{
    if(TA==0)
    {
        mini = min(mini, used);
        return;
    }
    if(idx>n||TA<0)
        return;
    fun(idx + 1, n, TA, used, mini,coins);
    fun(idx + 1, n, TA - coins[idx], used + 1, mini, coins);
}
int main()
{
    int n, i,total_amount;
    cin >> n>>total_amount;
    int coins[n+1];
    for (i = 1; i <= n;i++)
    {
        cin >> coins[i];
    }
    int mini = INT_MAX;
    fun(1, n, total_amount, 0, mini,coins);
    cout << mini << '\n';
}

它是著名的 Coin Change 问题的变体。我怎样才能在上面应用DP!? 我发现这将花费更多时间,因为它只是递归而无需记忆。 输入: 6 11 1 5 5 3 2 3

c++17 c++14 dynamic-programming greedy coin-change
© www.soinside.com 2019 - 2024. All rights reserved.