我是想着给每一个地方赋值一个1,然后马和他的控制点变成0,这样双重循环的时候就可以跳过,而且可以直接用状态转移方程,但是不理解为什么错,还有两个re。
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int N=25;
const int horx[]={1,1,2,2,-1,-1,-2,-2};
const int hory[]={2,-2,-1,1,2,-2,1,-1};
ll f[N][N];
int main()
{
int mx,my,bx,by;
cin>>bx>>by>>mx>>my;
f[0][1]=1;
f[1][0]=1;
for(int i=0;i<=bx;i++)
for(int j=0;j<=by;j++)
f[i][j]=1;
f[mx][my]=0;
for(int i=0;i<8;i++) f[mx+horx[i]][my+hory[i]]=0;
for(int i=0;i<=bx;i++)
for(int j=0;j<=by;j++)
{
if(f[i][j]==0) continue;
if(i==0)
{
f[0][j]=f[0][j-1];
continue;
}
if(j==0&&i!=0)
{
f[i][j]=f[i-1][j];
continue;
}
if(i==0&&j==0) continue;
f[i][j]=f[i-1][j]+f[i][j-1];
}
cout<<f[bx][by];
return 0;
}