P1535
Posted strategist-614
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章