如果你像这样:
#include<bits/stdc++.h>
using namespace std;
int f[20+10][20+10];
bool q[20+10][20+10];
const int dx[8]={-2,-1,-2,-1,1,2,2,1};
const int dy[8]={-1,-2,1,2,-2,-1,1,2};
int main()
{
int n0,n1,n2,n3;
cin>>n0>>n1>>n2>>n3;
f[0][0]=1;
for(int i=0;i<n0;i++)
for(int j=0;j<n1;j++)
q[i][j]=false;
q[n2][n3]=true;
for(int t=0;t<8;t++)
{
int a=n2+dx[t];
int b=n3+dy[t];
if(0<=a&&a<=n0&&0<=b&&b<=n1)
q[a][b]=true;
}
for(int i=0;i<=n0;i++)
for(int j=0;j<=n1;j++)
{
if(i!=0) f[i][j]+=f[i-1][j];
if(j!=0) f[i][j]+=f[i][j-1];
if(q[i][j]==true) f[i][j]=0;
}
cout<<f[n0][n1]<<endl;
return 0;
}
那么恭喜你踩坑了。 由于输出数据很大所以要开long long。 像这样:
#include<bits/stdc++.h>
using namespace std;
long long f[20+10][20+10];
bool q[20+10][20+10];
const int dx[8]={-2,-1,-2,-1,1,2,2,1};
const int dy[8]={-1,-2,1,2,-2,-1,1,2};
int main()
{
int n0,n1,n2,n3;
cin>>n0>>n1>>n2>>n3;
f[0][0]=1;
for(int i=0;i<n0;i++)
for(int j=0;j<n1;j++)
q[i][j]=false;
q[n2][n3]=true;
for(int t=0;t<8;t++)
{
int a=n2+dx[t];
int b=n3+dy[t];
if(0<=a&&a<=n0&&0<=b&&b<=n1)
q[a][b]=true;
}
for(int i=0;i<=n0;i++)
for(int j=0;j<=n1;j++)
{
if(i!=0) f[i][j]+=f[i-1][j];
if(j!=0) f[i][j]+=f[i][j-1];
if(q[i][j]==true) f[i][j]=0;
}
cout<<f[n0][n1]<<endl;
return 0;
}