一个数组如果只有0,1做标记,就不一定要用int型,可以直接bool类型
找到递推规律,最简单的是b[j]+=b[j-1],因为b[j-1]和b[j]还没有被更新,所以可以直接用,且数组只要设为b[25]大小就行。
防止数组越界,所有的坐标+2
用一个单独的数组a[25][25],记录是否为控制点
int main() {
int n,m,x,y;
long long int b[25][25]={0};//b[25]={0};
bool a[25][25]={0};
cin>>n>>m>>x>>y;
n+=2;m+=2;x+=2;y+=2;
for(int i=-2;i<=2;i++) {
for(int j=-2;j<=2;j++) {
if(abs(i)+abs(j)==3) a[x+i][y+j]=1;
}
}//怎么保证待会递推的时候不变
a[x][y]=1;
b[2][1]=1;//而不是b[2][2]=1;//b[2]=1;而不是b[1]=1;
for(int i=2;i<=n;i++) {
for(int j=2;j<=m;j++) {
//if(a[i][j]) continue;//b[i][j]=0;
//else b[i][j]=b[i-1][j]+b[i][j-1];
if(!a[i][j]) b[i][j]=b[i-1][j]+b[i][j-1];
//b[j]+=b[j-1]; else b[j]=0;
}
}//第一行第一列的上和左越界怎么办
cout<<b[n][m];
return 0;
}