这题需要注意的点是
第一种初始化表格边界的方式是:
f[1][1] = 1;
循环内部是这样写的
if(i - 1 > 0) f[i][j] += f[i-1][j];
if(j - 1 > 0) f[i][j] += f[i][j-1];
第二种是
for(int i=0; i<=n; i++){
if(!b[i][0])f[i][0] = 1;
else if(b[i][0]) break;
}
for(int i=0; i<=m; i++){
if(!b[0][i])f[0][i] = 1;
else if(b[0][i]) break;
}
初始化x轴和y轴 但是在初始化之后要去处理那些题目给出的不能走的点
如果提前把不能走的点设置好了,这里初始化又会把那些点设置回去
#include <cstdio>
int f[1000][1000];
int b[1000][1000];
int main()
{
int m,n;
int c1,c2;
scanf("%d%d%d%d",&n,&m,&c1,&c2);
b[c1][c2]=1;
b[c1-2][c2-1]=1;
b[c1-1][c2-2]=1;
b[c1+2][c2+1]=1;
b[c1+1][c2+2]=1;
b[c1-2][c2+1]=1;
b[c1-1][c2+2]=1;
b[c1+1][c2-2]=1;
b[c1+2][c2-1]=1;
for(int i=0; i<=n; i++){
if(!b[i][0])f[i][0] = 1;
else if(b[i][0]) break;
}
for(int i=0; i<=m; i++){
if(!b[0][i])f[0][i] = 1;
else if(b[0][i]) break;
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
f[i][j]=f[i][j-1]+f[i-1][j];
if(b[i][j])
f[i][j]=0;
}
}
printf("%d",f[n][m]);
return 0;
}