求助(40分 C++)

P1002 [NOIP2002 普及组] 过河卒

@[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


|