微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在动态编程中将递归值存储在我的地图中

如何解决如何在动态编程中将递归值存储在我的地图中

我正在尝试使用动态编程找到从左上角网格到右下角网格的方法数,因此我使用 map<pair<int,int>,int> 进行记忆。

当我尝试在地图中插入 k 值时,它不会存储在我的地图中,只会存储我的 cr 整数。为什么会发生这种情况?

#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
#include <stdbool.h>
#include <map>
using namespace std;
int grid(int r,int c,map<pair<int,int>& m1);
int main()
{
    map<pair<int,int> m1;
    int k=grid(2,3,m1);
    cout<<k<<endl;
    for(auto& it1:m1){
        cout<<it1.first.first<<"\t"<<it1.first.second<<"\t"<<it1.second<<endl;
    }
}

int grid(int r,int>& m1)
{
    if(r==0 || c==0) return 0;
    if(r==1 && c==1) return 1;
    if(m1[{r,c}]!=NULL){return m1[{r,c}];}
    int k=grid(r-1,c,m1)+grid(r,c-1,m1);
    m1.insert({{r,c},k});
    cout<<"k:"<<k<<endl;
    return grid(r-1,m1);
}

输出:-----------------------------------

k:1
k:1
k:1
k:1
k:1
k:2
k:1
k:1
k:3
k:1
k:1
k:1
k:1
k:1
k:2
k:1
k:1
3
1       2       0
1       3       0
2       1       0
2       2       0
2       3       0

解决方法

您使用 #include <iostream> using namespace std; int main() { sum = 0; value = 0; while(value > -1){ sum += value; cout << "Enter a value" << endl; cin >> value; } return 0; } 在地图中检查值的方式将创建不存在的条目。当您稍后尝试使用 m1[{r,c}] 添加密钥时,将不会添加该值,因为该密钥已存在。

你可以用

替换插入
m1.insert

或使用 m1[{r,c}] = k; find 检查密钥是否存在。这样做的另一个好处是不会对同一个键进行多次查找。

lower_bound

使用 insert 的提示版本可以利用之前不成功的查找来避免遍历地图来定位插入它的正确位置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。