C++ C2100:非法间接寻址

C++ C2100:非法间接寻址,c++,stl,dynamic-programming,C++,Stl,Dynamic Programming,我试图解决以下动态规划问题:给定无限多的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;

我试图解决以下动态规划问题:给定无限多的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;
}
int硬币(int n,无序地图和备忘录){
if(n<0){
返回0;
}
else如果(n==1){
返回1;
}
else如果(n==5){
返回2;
}
无序映射::迭代器iter=memo.find(n);
int-coinsValue;
如果(iter==memo.end()){
硬币价值=硬币(n-1,备忘录)+硬币(n-5,备忘录)+硬币(n-10,备忘录)+硬币(n-25,备忘录);
备注。插入(n,货币价值);
}
返回iter->second;
}
整数硬币(整数n){
无序地图备忘录;
归还硬币(n,备忘录);
}
int main(){

cout插入错误。应该是:

memo.insert(pair<int,int>(n, coinsValue));

请确保在下一行中返回
memo[n]
,否则您将得到
分段错误。

您能否向我们显示整个错误消息,而不仅仅是“非法间接寻址”?此外,您必须提取a。没有它,您的问题将被视为离题。
memo.insert(n,coinsValue);
应该是
memo.emplace(n,coinsValue);
需要一个
值类型
,它是
std::pair
。并且
iter
if
之后保留
end()
,导致无效的解引用。代码试图解决什么问题?
memo[n] = coinsValue;