1 solutions
-
0
暴力解法
#include<bits/stdc++.h> using namespace std; int n,m,X,Y; int dx[]={-1,-1,-2,-2,1,1,2,2,0}; int dy[]={2,-2,1,-1,2,-2,1,-1,0}; int dfs(int x,int y) { if(x==n&&y==m) return 1; for(int i=0;i<9;i++) { int a=X+dx[i],b=Y+dy[i]; if(a==x&&b==y) return 0; } int res=0; if(x+1<=n) res+=dfs(x+1,y); if(y+1<=m) res+=dfs(x,y+1); return res; } int main() { cin>>n>>m>>X>>Y; cout<<dfs(0,0); }记忆化
#include<bits/stdc++.h> using namespace std; int n,m,X,Y; int dx[]={-1,-1,-2,-2,1,1,2,2,0}; int dy[]={2,-2,1,-1,2,-2,1,-1,0}; const int N=25; long long f[N][N]; long long dfs(int x,int y) { if(x==n&&y==m)//终点 { return 1; } for(int i=0;i<9;i++) //当前点是非法点 { int a=X+dx[i],b=Y+dy[i]; if(a==x&&b==y) { return 0; } } if(f[x][y]==-1) //记忆化搜索优化 { f[x][y]=0; if(x+1<=n) f[x][y]+=dfs(x+1,y); if(y+1<=m) f[x][y]+=dfs(x,y+1); return f[x][y]; } return f[x][y]; } int main() { memset(f,-1,sizeof f); cin>>n>>m>>X>>Y; cout<<dfs(0,0); return 0; }
- 1
Information
- ID
- 3039
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 10
- Accepted
- 3
- Uploaded By