我正在尝试解决以下动态编程问题:给定无限量的四分之一(25),角钱(10),镍币(5)和便士(1),编写代码来计算表示n的方式的数量美分。
这是我的代码:
int coins(int n,unordered_map<int,int>& memo){
if (n < 0){
return 0;
}
else if (n == 1){
return 1;
}
else if (n == 5){
return 2;
}
unordered_map<int, int>::iterator iter = memo.find(n);
int coinsValue;
if (iter == memo.end()){
coinsValue = coins(n - 1,memo) + coins(n - 5,memo) + coins(n - 10,memo) + coins(n - 25,memo);
memo.insert(n, coinsValue);
}
return iter->second;
}
int coins(int n){
unordered_map<int, int> memo;
return coins(n, memo);
}
int main(){
cout << coins(10) << endl;
return 0;
}
我收到以下错误:
error C2100:illegal indirection
但我无法找到导致问题的原因,代码看起来很干净。
答案 0 :(得分:0)
你插错了。它应该是:
memo.insert(pair<int,int>(n, coinsValue));
甚至更简单地使用:
memo[n] = coinsValue;
请务必在以下行中返回memo[n]
,否则您将获得Segmentation fault.