P1535

Posted strategist-614

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1535相关的知识,希望对你有一定的参考价值。

P1535

P1535

记忆化搜索

(dp[i][j][t]) 表示从 (i,j) 开始走还剩下 (t) 秒时方案数

那么开始时就是 (dfs(stx,sty,t))

到达 (edx,edy,0) 时算一种路线

那么整个的结构就很清晰了:

    if(judge(x + 1,y)) ans += dfs(x + 1,y,t - 1);
    if(judge(x - 1,y)) ans += dfs(x - 1,y,t - 1);
    if(judge(x,y + 1)) ans += dfs(x,y + 1,t - 1);
    if(judge(x,y - 1)) ans += dfs(x,y - 1,t - 1);

最终的答案是: (dp[stx][sty][t])

int n,m,t;
int dp[N][N][20];
char s[N][N];
int stx,sty,edx,edy;
bool judge(int x,int y)
{
    if(x >= 1 && x <= n && y >= 1 && y <= m && s[x][y] == ‘.‘) return true;
    else return false;
}
int dfs(int x,int y,int t)
{
    if(dp[x][y][t] != -1) return dp[x][y][t];
    if(t < 0) return 0;
    if(x == edx && y == edy && t == 0) return 1;
    int ans = 0;
    if(judge(x + 1,y)) ans += dfs(x + 1,y,t - 1);
    if(judge(x - 1,y)) ans += dfs(x - 1,y,t - 1);
    if(judge(x,y + 1)) ans += dfs(x,y + 1,t - 1);
    if(judge(x,y - 1)) ans += dfs(x,y - 1,t - 1);
    return (dp[x][y][t] = ans); 
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m >> t;
    memset(dp,-1,sizeof dp);
    for(int i =1;i <= n;i++)
    {
        for(int j =1;j <= m;j++)
            cin >> s[i][j];
    }
    cin >> stx >> sty >> edx >> edy;
    cout << dfs(stx,sty,t) << endl;
    return 0;
}

以上是关于P1535的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1535 游荡的奶牛

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板