dx和dy?
by e4ns @ 2024-01-18 11:58:37
你的数组?范围开大一点
by e4ns @ 2024-01-18 11:59:27
```cpp
for(int i=1;i<=8;i++)
if(x+dx[i]>=0&&x+dx[i]<=n&&y+dy[i]>=0&&y+dy[i]<=n/*应该是m*/)
a[x+dx[i]][y+dy[i]]=0;
```
by danlao @ 2024-01-18 12:02:43
@[drachess](/user/1122851)
by danlao @ 2024-01-18 12:02:59
@[e4ns](/user/846618) 数组织要保证不访问到边界值外界不会报错,`a[21][21]`的区域是`a[i][j]`$\left(0\le i,j \le 20\right)$,题目的数据范围是$1 \le n,m \le 20$
by danlao @ 2024-01-18 12:10:05
@[e4ns](/user/846618) @[drachess](/user/1122851) 不过最好多开$10$及以上,不要卡着开
by danlao @ 2024-01-18 12:11:22
感谢大家!不过,如下仍全RE:```cpp
#include<iostream>
using namespace std;
long long a[31][31];
int dx[]={0,2,1,-1,-2,-2,-1,1,2};
int dy[]={0,1,2,2,1,-1,-2,-2,-1};
int main(){
int n,m,x,y;
cin>>n>>m>>x>>y;
for(int i=0;i<=n;i++)
for(int j=0;j=m;i++)
a[i][j]=1;
a[x][y]=0;
for(int i=1;i<=8;i++)
if(x+dx[i]>=0&&x+dx[i]<=n&&y+dy[i]>=0&&y+dy[i]<=m)
a[x+dx[i]][y+dy[i]]=0;
for(int i=0;i<=n;i++){
for(int j=0;i<=m;j++){
if((i==0&&j==0)||(a[i][j]==0))
continue;
if(i==0)
a[i][j]=a[i][j-1];
if(j==0)
a[i][j]=a[i-1][j];
if(i!=0&&j!=0&&a[i][j]!=0)
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
cout<<a[n][m];
return 0;
}
```
by drachess @ 2024-01-19 19:57:17
```cpp
#include<iostream>
using namespace std;
long long a[31][31];
int dx[]={0,2,1,-1,-2,-2,-1,1,2};
int dy[]={0,1,2,2,1,-1,-2,-2,-1};
int main(){
int n,m,x,y;
cin>>n>>m>>x>>y;
for(int i=0;i<=n;i++)
for(int j=0;j=m;i++)
a[i][j]=1;
a[x][y]=0;
for(int i=1;i<=8;i++)
if(x+dx[i]>=0&&x+dx[i]<=n&&y+dy[i]>=0&&y+dy[i]<=m)
a[x+dx[i]][y+dy[i]]=0;
for(int i=0;i<=n;i++){
for(int j=0;i<=m;j++){
if((i==0&&j==0)||(a[i][j]==0))
continue;
if(i==0)
a[i][j]=a[i][j-1];
if(j==0)
a[i][j]=a[i-1][j];
if(i!=0&&j!=0&&a[i][j]!=0)
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
cout<<a[n][m];
return 0;
}
```
对不起,发乱了,是上边那样。
by drachess @ 2024-01-19 19:58:55