hdu 1978 記憶化搜索

注意:php

dp【i】【j】 表示(i,j)這個點有多少種方式       mark【i】【j】表示這個點是否走過  假設有直接返回dp【i】【j】    dp的求法爲所有夢走到點的dp的和ios

注意mark開始的標記ide

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std; int dp[110][110],mark[110][110],cost[110][110],n,m; int dfs(int x,int y) { int i,j; if(mark[x][y]) return dp[x][y];
    //dp[x][y]=0;
 for(i=0;i<=cost[x][y];i++) { for(j=0;j<=cost[x][y]-i;j++) { int xx=x+i; int yy=y+j; if(xx<=0||xx>n||yy<=0||yy>m) continue; if(mark[xx][yy]==0) {
                mark[x][y]=1;
                dfs(xx,yy); }
            dp[x][y]=(dp[x][y]+dp[xx][yy])%10000; } } return dp[x][y]; } int main() { int T,i,j;
    scanf("%d",&T); while(T--) {
        scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=m;j++)
        scanf("%d",&cost[i][j]);
        memset(dp,0,sizeof(dp));
        memset(mark,0,sizeof(mark));
        dp[n][m]=1;
        mark[n][m]=1;
        printf("%d\n",dfs(1,1)); } return 0; }
相關文章
相關標籤/搜索