#include<iostream>
#include<cmath>
using namespace std;
int pathNum(int i,int j);
bool isPass(int i,int j);
int a,b,c,d;
int main(){
long long l[20][20];
l[0][0]=1;
cin>>a>>b>>c>>d;
/*
for(int i=0;i<=a;i++){
for(int j=0;j<=b;j++){
if(!isPass(i,j,c,d)){
continue;
}
}
}*/
for(int i=0;i<=a;++i){
for(int j=0;j<=b;++j){
if(i>0||j>0){
l[i][j]=0;
}
if(isPass(i,j)){
if(j){
l[i][j]+=l[i][j-1];
}
if(i){
l[i][j]+=l[i-1][j];
}
}
}
}
cout<<l[a][b];
return 0;
//return pathNum(0,0);
}
bool isPass(int i,int j){
if(abs(i-c)==2&&abs(j-d)==1){
return false;
}else if(abs(i-c)==1&&abs(j-d)==2){
return false;
}else if(i==c&&j==d){
return false;
}else{
return true;
}
}
/*递归,但是老出不来结果*/
int pathNum(int i,int j){
if(i==a&&j==b){
return 1;
}
int i1=0,j1=0;
if(i+1<=a&&isPass(i+1,j)){
i1=pathNum(i+1,j);
}
if(j+1<=b&&isPass(i,j+1)){
j1=pathNum(i,j+1);
}
return i1+j1;
}
为什么#3会time out呢?难道是我的isPass逻辑不对吗?我看很多标准答案是提供了数组以空间算时间,但这个函数的逻辑很简单,理论上就算每个点都跑一遍这个函数也耗不了太多的时间哈 本来写了一个递归,但0分,真是伤脑筋 哈哈哈 函数在最下面,南顶~