hdu_1208 搜索dp

博主在紧张的近代史复习期间,通过一道搜索DP题目进行编程练习。该题利用C++实现了一个动态规划算法,目的是寻找从矩阵左上角到右下角的路径数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚考完苦逼的近代史啊!!!伤不起啊,论文作业都没交不知道会不会挂唉。。。不要挂不要挂。。。(@﹏@)~

为了复习近代史有几天没ac了。。。先来道搜索dp热热身

#include<iostream>
using namespace std;
const int way[2][2]={{1,0},{0,1}};   
__int64 dp[40][40];
int n;
char s[40][40];
int a[40][40];
void init()
{
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            dp[i][j]=-1;
        }
    }
    return ;
}
bool can(int x,int y)
{   
    if(1<=x && x<=n && y>=1 && y <= n )
    {
        if( a[x][y] > 0)
        {
            return true;
        }  
        else
        {                
            if(x==y && x==n)
            {
                return true;
            }
            else
            {
                return false; 
            } 
        }
    }              
    else
    {
        return false;
    }
}
__int64 dfs(int x,int y)
{
    if(x==y && x==n)
    {
        return 1;
    }
    else if(a[x][y]==0)
    {
        return 0;
    }
    else
    {
        if(dp[x][y]==-1)
        {       
            int tx,ty;
            __int64 temp=0;            
            for(int i=0;i<2;i++)
            {
                tx=x+way[i][0]*a[x][y];
                ty=y+way[i][1]*a[x][y];  
                if(can(tx,ty))
                {
                    temp+=dfs(tx,ty);
                }  
            }
            dp[x][y]=temp;
        }
        return dp[x][y];
    }   
}
int main()
{
    while(cin>>n)
    {
        if(n==-1)
        {
            break;
        }
        init();
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {       
                cin>>s[i][j];
                a[i][j]=s[i][j]-'0';
            }
        }
        cout<<dfs(1,1)<<endl;
    }        
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值