@[yyf1000001000](/user/232129) 我也挺难
by long_long @ 2020-02-10 14:18:16
巧了
by yyf1000001000 @ 2020-02-10 14:20:29
现在 80。。。了
还是求助
```cpp
#include <iostream>
using namespace std;
int main(){
long long a[24][24];
int i,j,p,q,m,n;
for(i=0;i<24;i++){
for(j=0;j<24;j++){
a[i][j]=0;
}
}
cin>>p>>q;
cin>>i>>j;
i=i+2;j=j+2;p=p+2;q=q+2;
a[i+1][j+2]=-1;a[i-1][j-2]=-1;
a[i-1][j+2]=-1;a[i+1][j-2]=-1;
a[i+2][j+1]=-1;a[i-2][j-1]=-1;
a[i-2][j+1]=-1;a[i+2][j-1]=-1;
a[i][j]=-1;a[2][2]=1;
for(i=0;i<2;i++){
for(j=0;j<24;j++){
a[i][j]=0;
}
}
for(i=0;i<24;i++){
for(j=0;j<2;j++){
a[i][j]=0;
}
}
for(m=2;m<22;m++){
for(n=2;n<22;n++){
if(m==2&&n==2){continue;}
if(a[m][n]==-1){a[m][n]=0;}
else{a[m][n]=a[m-1][n]+a[m][n-1];}
}
}
cout<<a[p][q]<<endl;
return 0;
}
```
by yyf1000001000 @ 2020-02-10 15:10:23
判断一下边界,不然会出问题
在这句$a[m][n]=a[m-1][n]+a[m][n-1];$更新前判断边界
举个例子,马的位置在(0,3)(你的代码里就是(2,5)后面的都是按你的代码的表示)然后a[1][3]和a[1][7](这两个点已经在棋盘外了)都会变成-1,那你在更新a[2][3]和a[2][7]时错误的加上了这两个本不该加的-1
by 希希大魔王 @ 2020-02-10 15:16:55
@[希希大魔王](/user/70415) 。。。发晚了,别的问题我也暂时没看出来
by 希希大魔王 @ 2020-02-10 15:17:58
看一下数据范围?
应该小于等于22
by 希希大魔王 @ 2020-02-10 15:22:44
@[希希大魔王](/user/70415)
已 AC
谢谢大佬
by yyf1000001000 @ 2020-02-10 17:52:17