第一道记忆化搜索,,,,,,明显是看了别人的解题报告
#include <cstdio>
#include <cstring>#include <iostream>
using namespace std;
int map[111][111];
int dp[111][111];
int n,m;
int dfs(int x,int y)
{
int i,j,k,l;
if(x==n&&m==y)
return 1;
if(dp[x][y]>=0)
return dp[x][y];
int d=map[x][y];
int sum=0;
for(i=0;i<=d;i++)
{
for(j=0;j<=d;j++)
{
if(x+i<=n&&y+j<=m&&i+j!=0&&i+j<=d)
{
sum+=dfs(x+i,j+y);
sum%=10000;
}
}
}
dp[x][y]=sum;
return sum;
}
int main()
{
int i,j,k,l;
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cin>>map[i][j];
}
memset(dp,-1,sizeof(dp));
int sum=dfs(1,1);
cout<<sum<<endl;
}
return 0;
}