代码如下,记忆化搜索
控制点在边界的情况应该考虑到了
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int x,y,a,b;
ll memo[21][21];
int f(int x,int y,int a,int b){
if(x<0||y<0)
return 0;
if((x==a-1&&y==b-2)||(x==a-1&&y==b+2)||(x==a+1&&y==b+2)||(x==a+1&&y==b-2)||(x==a+2&&y==b-1)||(x==a+2&&y==b+1)||(x==a-2&&y==b-1)||(x==a-2&&y==b+1)||(x==a&&y==b))
memo[x][y]=0;
if(memo[x][y]==-1)
memo[x][y]=f(x-1,y,a,b)+f(x,y-1,a,b);
if(memo[x][y]!=-1)
return memo[x][y];
return memo[x][y];
}
int main(void){
memset(memo,-1,sizeof(memo));
memo[0][0]=1;
cin>>x>>y>>a>>b;
cout<<f(x,y,a,b);
return 0;
}