#include<bits/stdc++.h>
using namespace std;
long long x[105][105];
long long dp[105][105];
int main()
{
int n,m;
cin>>n>>m;
int hrx,hry;cin>>hrx>>hry;
n+=2;m+=2;hrx+=2;hry+=2;
memset(x,0,sizeof(x));
x[hrx][hry]=1;
x[hrx-1][hry-2]=1;
x[hrx-2][hry-1]=1;
x[hrx-2][hry+1]=1;
x[hrx-1][hry+2]=1;
x[hrx+1][hry-2]=1;
x[hrx+2][hry-1]=1;
x[hrx+2][hry+1]=1;
x[hrx+1][hry+2]=1;
memset(dp,0,sizeof(dp));
dp[2][2]=1;dp[3][2]=1;dp[2][3]=1;
for(int i=1;i<=n;i++)
{
dp[i][2]=1;
}
for(int j=1;j<=m;j++)
{
dp[2][j]=1;
}
for(int i=3;i<=n;i++)
for(int j=3;j<=m;j++)
{
if(x[i][j]==1)dp[i][j];
if(x[i][j]==0)
{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
cout<<dp[n][m];
return 0;
}
我的思路是先把x,y两条边赋值为1然后再推,不考虑这两条了,看了题解以为是越界什么的每个坐标加了2,但还是40分,不知道哪里错了...谢谢帮助