#3#4WA 60pts

P1002 [NOIP2002 普及组] 过河卒

#### 下面直接上代码 ## AC code ```C++ #include<iostream> using namespace std; const int maxn=20+5; long long f[maxn][maxn];//数据可能超出int int b[maxn][maxn];//障碍,1表示障碍 int m,n,x,y; // 八个xy坐标的偏移 int xy[][2]={ {-1,-2},{-1, 2}, {1, -2},{1, 2}, {-2,-1}, {-2, 1}, {2,-1}, {2, 1} }; void dumpb() { for(int i=0;i<=m;i++) { for(int j=0;j<=n;j++) { cout<<b[i][j]<<" "; } cout<<endl; } } void dumpf() { for(int i=0;i<=m;i++) { for(int j=0;j<=n;j++) { cout<<f[i][j]<<" "; } cout<<endl; } } int main() { cin>>m>>n>>x>>y; b[x][y]=1;// 马的位置也不能通过(题目没说,坑) for(int i=0;i<8;i++) { int nx=x+xy[i][0]; int ny=y+xy[i][1]; // cout<<nx<<" " <<ny<<endl; if(nx>=0 && nx<=m && ny>=0 && ny<=n) b[nx][ny]=1; } //dumpb(); f[0][0]=1; //初始化第0行 for(int i=1;i<=n;i++) if(b[0][i]==1) f[0][i]=0; else f[0][i]=f[0][i-1]; //初始化第0列 for(int i=1;i<=m;i++) { if(b[i][0]==1) f[i][0]=0; else f[i][0]=f[i-1][0]; } //dumpf(); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { if(b[i][j]==1) f[i][j]=0; else f[i][j]=f[i-1][j]+f[i][j-1];//只能从上和左下来 } cout<<f[m][n]<<endl; //dumpf(); return 0; } ```
by songruizhi @ 2023-07-13 15:24:33


本人绿名小蒟蒻,代码可能有点长,望大佬指点
by songruizhi @ 2023-07-13 15:25:52


|