过河卒:
一句话题解:
按照卒的行棋方式,f[i][j]应由f[i-1][j]或f[i][j-1]转移而来,并且对马的可移动位置进行特殊判断,要注意的是在边界时,f[i][j]只能由边界转移而来,毕竟卒只能向右或下移动
状态转移方程:f[i][j]=f[i-1][j]+f[i][j-1];
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,f[101][101],x,y,h[101][101];
int main(){
scanf("%d%d%d%d",&n,&m,&x,&y);
h[x-2][y-1]=h[x+2][y-1]=h[x-1][y-2]=h[x+1][y-2]=h[x+1][y+2]=h[x-1][y+2]=h[x+2][y+1]=h[x-2][y+1]=1;
for(int i=1;i<=n;i++){
if(h[i][0]==0) f[i][0]=f[i-1][0];
}
for(int i=1;i<=m;i++){
if(h[0][i]==0) f[0][i]=f[0][i-1];
}
f[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(h[i][j]==0){
f[i][j]=f[i][j-1]+f[i-1][j];
}
}
}
printf("%d",f[n][m]);
return 0;
}