原题链接
代码奉上:
#include<bits/stdc++.h>
using namespace std;
int x,y,m,n;
int dx[8]={-1,-1,1,1,-2,-2,2,2};
int dy[8]={-2,2,-2,2,-1,1,-1,1};
const int N=30;
long long cnt=0;
bool b[N][N];
void dfs(int x_,int y_){
if(!b[x_][y_]) return;
if(x_==x&&y_==y){
cnt++;
return;
}
if(x_+1<=x) dfs(x_+1,y_);
if(y_+1<=y) dfs(x_,y_+1);
}
int main(){
memset(b,true,sizeof(b));
cin>>x>>y>>m>>n;
b[m][n]=false;
for(int i=0;i<8;i++){
int tx=m+dx[i];
int ty=n+dy[i];
if(tx>=0&&tx<=x&&ty>=0&&ty<=y) b[tx][ty]=false;
}
dfs(0,0);
cout<<cnt;
return 0;
}
1,2,5都AC了,但3,4TLE了。
一定要用dp吗?dfs是不是过不了(悲)
thx