现在的位置: 首页 > 综合 > 正文

hdu 1978 How many ways

2018年01月11日 ⁄ 综合 ⁄ 共 585字 ⁄ 字号 评论关闭

记忆化搜索

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define mod 10000
int const MAX = 110;
int map[MAX][MAX],vis[MAX][MAX];
int T,n,m;
int dfs(int x,int y){
    int num,temp;
    num = 0;
    if(x == n && y == m) return 1;
    if(vis[x][y] != -1) return vis[x][y];
    temp = map[x][y];
    for(int i = 0;i <= temp;i++){
       for(int j = 0;j <= temp;j++){
          if(x + i <= n && y + j <= m && i + j != 0 && i + j <= temp){
            num += dfs(x + i,y + j);
            num %= mod;
          }
       }
    }
    vis[x][y] = num;
    return num;
}
int main(){
   while(~scanf("%d",&T)){
      while(T--){
          scanf("%d%d",&n,&m);
          for(int i = 1;i <= n;i++){
             for(int j = 1;j <= m;j++){
                scanf("%d",&map[i][j]);
             }
          }
          memset(vis,-1,sizeof(vis));
          printf("%d\n",dfs(1,1));
      }
   }
   return 0;
}

抱歉!评论已关闭.