该问题需要计算特定成本的硬币变化次数。
例如,如果我的硬币值为50, 20, 10, 5, 1
,我可以形成以下成本:
5 => (5), (11111),这是 2 种方式。
10 => (10), (5, 5), (5, 11111), (11111, 11111),这是 4 种方式。
这是我的功能。它从 10 的成本中返回错误的结果(返回 9 种方式,而实际的方式只有 4 种)
int dp[10000];
int coins[] = { 50, 20, 10, 5, 1 };
int rec(int n)
{
if (n == 0) return 1;
if (dp[n] != -1) return dp[n];
int cnt = 0;
for (int i = 0; i < 5; i++)
if (coins[i] <= n) cnt += rec(n - coins[i]);
return dp[n] = cnt;
}
如何修复此功能以提供正确数量的方式?这个算法是否正确?在此处查看完整的代码及其输出
注意:我的问题不在于dp
数组初始化。我在每次调用之前都memset
将其初始化为.-1
rec