f[x+dx[i]][y+dy[i]]=0; x+dx[i]会<0
by plmplmplm @ 2024-03-25 10:01:32
@[plmplmplm](/user/172075) 可我写了```if(x+dx[i]>=0 && y+dy[i]>=0)```的呀?
by jimmy0926 @ 2024-03-27 19:03:20
边界不要全设1,不然会出现例如第一行
1 1 0 1
这种情况,理论应该是
1 1 0 0
by DoingNow @ 2024-03-29 15:23:40
@[DoingNow](/user/1324857) 什么意思?可以举个例子吗?蒟蒻没太听懂 ~~(已关注)~~
by jimmy0926 @ 2024-03-30 16:42:31
```
#include<bits/stdc++.h>
using namespace std;
int a[21][21];
long long f[21][21];
int n,m,x,y;
const int d[9][2]={{0,0},{-1,-2},{-1,2},{1,-2},{1,2},{-2,-1},{-2,1},{2,-1},{2,1}};
void ff(int x,int y){
int xx,yy;
memset(a,0,sizeof(a));
for(int i=0;i<9;i++){
xx=x+d[i][0];yy=y+d[i][1];
if(xx>=0&&x<=n&&yy>=0&&yy<=m) a[xx][yy]=1;
}
return ;
}
int main(){
cin>>n>>m>>x>>y;
ff(x,y);
f[0][0]=1;
for(int i=1;i<=n;i++){
if(a[i][0]==1)f[i][0]=0;
else f[i][0]=f[i-1][0];
}
for(int i=1;i<=m;i++){
if(a[0][i]==1)f[0][i]=0;
else f[0][i]=f[0][i-1];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1)f[i][j]=0;
else f[i][j]=f[i-1][j]+f[i][j-1];
}
}
cout<<f[n][m];
}
```
by Ryan2024hcy @ 2024-03-31 10:23:45
@[Ryan2024hcy](/user/1267853) 求**大佬**指教,我错在哪里了?
by jimmy0926 @ 2024-04-02 15:23:30