蒟蒻求助

P1002 [NOIP2002 普及组] 过河卒

@[hil1](/user/751112) 注意卒是否越界的判断! //本蒟蒻代码 ``` #include<bits/stdc++.h> using namespace std; long long n,m,x,y,dp[50][50]; int dx[8]={-2,-1,2,-1,-2,1,1,2}; int dy[8]={-1,-2,-1,2,1,-2,2,1}; int main(){ cin>>n>>m>>x>>y; for(int i=0;i<=n;i++){ for(int j=0;j<=m;j++){ dp[i][j]=1; } } dp[x][y]=0; for(int i=0;i<8;i++){ if(x+dx[i]<0||y+dy[i]<0){ continue; } dp[x+dx[i]][y+dy[i]]=0; } for(int i=1;i<=n;i++){ if(dp[0][i]==0){ for(int j=i+1;j<=n;j++){ dp[0][j]=0; } break; } } for(int i=1;i<=m;i++){ if(dp[i][0]==0){ for(int j=i+1;j<=m;j++){ dp[j][0]=0; } break; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(dp[i][j]==0){ continue; } dp[i][j]=dp[i-1][j]+dp[i][j-1]; } } cout<<dp[n][m]; return 0; } ```
by mamingyu0927 @ 2023-09-03 20:30:43


不要用dfs,用递推 ```cpp #include <bits/stdc++.h> using namespace std; int g[21][21]; long long s[21][21]; int d[8][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}}; int main(){ int xb,yb,xk,yk; cin>>xb>>yb>>xk>>yk; g[xk][yk]=1; for(int i=0;i<8;i++){ int tx=xk+d[i][0],ty=yk+d[i][1]; if(tx>=0 && tx<=xb && ty>=0 && ty<=yb) g[tx][ty]=1; } if(g[0][0] || g[xb][yb]) cout<<0; else{ for(int i=1;i<=xb;i++){ if(g[i][0]) break; s[i][0]=1; } for(int i=1;i<=yb;i++){ if(g[0][i]) break; s[0][i]=1; } for(int i=1;i<=xb;i++) for(int j=1;j<=yb;j++) if(!g[i][j]) s[i][j]=s[i-1][j]+s[i][j-1]; cout<<s[xb][yb]; } return 0; } ```
by zjsdsb24 @ 2023-09-03 21:38:56


谢谢dalao
by hil1 @ 2023-09-08 20:07:41


|