小白月赛41 e题求助

这样用dfs哪里不对
#include <iostream>
#include <algorithm>
#include <cstring>
 
using namespace std;
 
const int N = 55;
 
char g[N][N];
bool st[N][N][N];
int length[N][N][N];
int n,m,h;
 
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
 
int dp(int a, int b,int cnt)
{
    // cout << a << " " << b << " " << cnt  << endl;
    int &v = length[a][b][cnt];
    // cout << a << " " << b << " " << v  <<" " << cnt << endl;
     
    if(a == n && b == m) return 0;
    if(st[a][b][cnt]) return v;
     
    for(int i = 0; i < 4; i++)
    {
        int x = a + dx[i];
        int y = b + dy[i];
         
        if(x >= 1 && x <= n && y >= 1 && y <= m && g[x][y] != '*' && !st[x][y][cnt]) {
           st[a][b][cnt] = 1;
           if(g[x][y] == '.')    v = min(v,dp(x,y,cnt) + 1);
           else if(cnt + g[x][y] - '0' < h)    v = min(v,dp(x,y,cnt + g[x][y] - '0') + 1);
        }
    }
         
    return v;   
}
 
int main()
{
    cin >> n >> m >> h;
     
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin >> g[i][j];
     
    memset(length,0x3f,sizeof length);
    // length[1][1] = 0;
    dp(1,1,0);
     
    // cout << length[n][m];
    if(length[1][1][0] == 0x3f3f3f3f) cout << "-1";
    else cout << length[1][1][0];
     
    return 0;
}

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务