| 比赛 | 搜索题... | 评测结果 | C | 
    | 题目名称 | 跳马问题 | 最终得分 | 0 | 
    | 用户昵称 | Vincent | 运行时间 | 0.000 s | 
    | 代码语言 | C | 内存使用 | 0.00 MiB | 
    | 提交时间 | 2014-11-04 19:37:07 | 
显示代码纯文本
#include <cstdio>
#include <cstring>
#define MAXN 30
using namespace std;
int f[MAXN][MAXN]={0};
int m,n;
int dp(int x,int y){
    if ( x<1|| y<1 || x>m || y>n) return 0;
    int &ans = f[x][y];
    if (ans!=-1) return ans;
    if (x==1 && y==1) ans=1;
    else ans=dp(x-1,y-2)+dp(x-2,y-1)+dp(x+1,y-2)+dp(x+2,y-1);
    return ans;
} 
int main(){
    freopen("horse.in","r",stdin);
    freopen("horse.out","w",stdout);
    scanf("%d%d",&m,&n);
    memset(f,-1,sizeof(f));
    printf("%d\n",dp(m,n));
    return 0;
}