poj 2704 (记忆化搜索)

来源:互联网 发布:骑枕头知乎 编辑:程序博客网 时间:2024/06/07 18:54
#include <iostream>#include <cstdio>#include <cstring>using namespace std;__int64 dp[50][50];char Map[50][50];int n;bool judge(int x,int y) {    if(x >= 0 && x < n && y >= 0 && y < n)        return true;    return false;}__int64 dfs(int i, int j) {    if(i == n-1 && j == n-1)        return 1;    if(dp[i][j])        return dp[i][j];    int k = Map[i][j] - '0';    if(k == 0)        return 0;    if(judge(i + k, j)) {        dp[i][j] += dfs(i+k, j);    }     if(judge(i, j + k)) {        dp[i][j] += dfs(i, j + k);    }    return dp[i][j];}int main(){    while(scanf("%d", &n) != EOF) {        if(n == -1)            break;        for(int i = 0; i < n; i++) {           scanf("%s", Map[i]);        }    memset(dp, 0, sizeof(dp));    __int64 ans = dfs(0, 0);    printf("%I64d\n", ans);    }    return 0;}

0 0
原创粉丝点击