【发布时间】:2012-08-05 08:35:02
【问题描述】:
问题需要计算特定成本的硬币变化次数。
例如,如果我的硬币值为50, 20, 10, 5, 1,我可以形成以下成本:
5 => (5), (11111), 2 种方式。
10 => (10), (5, 5), (5, 11111), (11111, 11111),这四种方式。
这是我的功能。它从 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;
}
如何修复此功能以提供正确数量的方式?这个算法是否正确?查看完整代码及其输出here
注意:我的问题不在于 dp 数组初始化。每次调用rec之前,我都使用memset将其初始化为-1。
【问题讨论】:
-
到底是什么问题(你想要得到什么,你实际得到什么)?
-
您的代码给出的结果是什么?
标签: c++ algorithm dynamic-programming coin-change