自己试的样例都是对的,进去就RE了
#include<bits/stdc++.h>
using namespace std;
const int px[9]={0,1,2,2,1,-1,-2,-2,-1};
const int py[9]={0,-2,-1,1,2,2,1,-1,-2};
int n,m,xm,ym,a[25][25];
long long sum,as[2][25];
int main(){
cin>>n>>m>>xm>>ym;
for(int i=1;i<=9;i++){
if(xm+px[i]>=0&&ym+py[i]>=0)
a[xm+px[i]+2][ym+py[i]+2]=1;
}
as[0][2]=1;
for(int i=2;i<=n+2;i++){
for(int j=2;j<=m+2;j++){
if(i==2&&j==2){continue;}
if(a[i][j]==1){as[i&1][j]=0;continue;}
as[i&1][j]=as[(i-1)&1][j]+as[i&1][j-1];
}
}
cout<<as[(n+2)&1][m+2];
return 0;
}
重写了,换了简单一点的,但是还是RE
#include<bits/stdc++.h>
using namespace std;
const int px[9]={0,1,2,2,1,-1,-2,-2,-1};
const int py[9]={0,-2,-1,1,2,2,1,-1,-2};
long long n,m,xm,ym,a[25][25],ma[25][25];
int main(){
cin>>n>>m>>xm>>ym;
for(int i=1;i<=9;i++){
int ax=xm+px[i],bx=ym+py[i];
if(ax<0||bx<0)continue;
ma[ax][bx]=-1;
}
a[0][0]=1;
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
if(i==0&&j==0)continue;
if(ma[i][j]==-1)continue;
if(i==0){
a[i][j]=a[i][j-1];
continue;
}
if(j==0){
a[i][j]=a[i-1][j];
continue;
}
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
cout<<a[n][m];
return 0;
}