dp(x,y)=dp(x-1,y)+dp(x,y-1)不在马的范围
=0 在马的范围
#include<iostream> using namespace std; long long dp[30][30]; int v[30][30];//数组开的太大会wa int direct[9][2]={{0,0},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}}; int n,m,x,y; void solve() { int i,j; dp[0][0]=1; for(i=1;i<=n;i++) if(!v[i][0]) dp[i][0]=dp[i-1][0]; for(i=1;i<=m;i++) if(!v[0][i]) dp[0][i]=dp[0][i-1]; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(!v[i][j]) dp[i][j]=dp[i-1][j]+dp[i][j-1]; cout<<dp[n][m]<<endl; } int main() { cin>>n>>m>>x>>y; for(int i=0;i<9;i++) { int xx=x+direct[i][0]; int yy=y+direct[i][1]; if(xx>=0 && yy>=0 && xx<=n && yy<=m) v[xx][yy]=1; } solve(); return 0; }