我这递归改的动态规划,为什么结果不一样


#include 
#include 
#include 
#include 
#include 
using namespace std;
long process(int N,int M,int  row,int col,int K)
{
    if(row==N||col==M||row<0||col<0)
    {
        return 0;
    }
    if(K==0)
    {
        return 1;
    }
    long live=process(N,M,row+1,col,K-1);
    live+=process(N,M,row-1,col,K-1);
    live+=process(N,M,row,col+1,K-1);
    live+=process(N,M,row,col-1,K-1);
    return live;
}
long gcd(int n,int m)
{
    return m ==0?n:gcd(m,n%m);
}
string bob1(int N,int M,int row,int col,int K)
{
    long all=pow(4,K);
    long live=process(N,M,row,col,K);
    long num=gcd(all,live);
    double s=live/num+0.0;
    double n=all/num+0.0;
    double m=s/n*100;
    return "存活率为"+to_string(m)+"%";
}
long getvalue2(int N,int M,int row,int col,int K,long*** q);
long process2(int N,int M,int  row,int col,int K,long***q);
string bob2(int N,int M,int row,int col,int K)
{
    long ***q=new long**[K+1];
    for(int i = 0;i < K+1;i++)
    {
        q[i]=new long*[N];
    }
    for(int i = 0;i 1;i++) {
        for(int j = 0;j < N;j++) {
            q[i][j]=new long[M];
        }
    }
    long all=pow(4,K);
    long live=process2(N,M,row,col,K,q);
    long num=gcd(all,live);
    double s=live/num+0.0;
    double n=all/num+0.0;
    double m=s/n*100;
    for(int i = 0;i 1;i++) {
        for(int j = 0;j < N;j++) {
            delete[] q[i][j];
        }
    }
    for(int i = 0;i < K+1;i++)
    {
        delete[] q[i];
    }
    delete[] q;
    return "存活率为"+to_string(m)+"%";
}
long process2(int N,int M,int  row,int col,int K,long***q)
{
    for(int i = 0;i < K+1;i++) {
        for(int j = 0;j < 10;j++) {
            for(int c = 0;c < 9;c++) {
                q[i][j][c]+=getvalue2(N,M,j+1,c,i-1,q);
                q[i][j][c]+=getvalue2(N,M,j-1,c,i-1,q);
                q[i][j][c]+=getvalue2(N,M,j,c+1,i-1,q);
                q[i][j][c]+=getvalue2(N,M,j,c-1,i-1,q);
            }
        }
    }
    return q[K][row][col];
}
long getvalue2(int N,int M,int row,int col,int K,long*** q)
{
    if(row>=N||col>=M||row<=0||col<=0||K<0)
    {
        return 0;
    }
    if(K==0)
    {
        return 1;
    }
    return q[K][row][col];
}
int main(int argc, char** argv){
    cout<10,9,5,6,10)<10,9,5,6,10);
    return 0;
}

代码太多了,请学会调式,主要是
string bob2(int N,int M,int row,int col,int K)
这里下断点,看看参数进来对不对

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^