#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