题目名字
过河卒(动态规划)
题目链接
题意
给马的位置,这个马的周围有8个点不能走,从a点开始走,计算从a点到b点走的方法有几条
思路
- 把马的周围不让走的8个点求出并用bool函数来判断为1,表示不可走
- 再用for循环来递推可以走的路线的数量
算法一:递推
时间复杂度
$
实现步骤
代码
#define long long int
#include<iostream>
using namespace std;
const int N=55;
int dx[]={0,-2,-1,1,2,2,1,-1,-2};
int dy[]={0,1,2,2,1,-1,-2,-2,-1};
int f[N][N];
bool s[N][N];
signed main( ){
int n,m,a,b;
cin>>n>>m>>a>>b;
n+=2;
m+=2;
a+=2;
b+=2;
f[2][1]=1;//定义初值
s[a][b]=1;//标记不能走
for(int i=1;i<=8;i++){
s[a+dx[i]][b+dy[i]]=1;//定义不能走
}
for(int i=2;i<=n;i++){
for(int j=2;j<=m;j++){
if(s[i][j]==1)
continue;
}
f[i][j]=f[i-1][j]+f[i][j-1];
}
cout<<f[n][m];
return 0;
}