信奥赛普及组 洛谷P1002过河卒(递推基础) 参考代码
2022-07-02 18:21 作者:信奥赛USACO郑老师 | 我要投稿
#include <bits/stdc++.h>
using namespace std;
const int MAXN=20;
const int MAXM=20;
long long cb[MAXN+1+2][MAXM+1+2];
bool block[MAXN+1+2][MAXM+1+2];
int main()
{
int n,m,x,y;
cin>>n>>m>>x>>y;
n+=2;m+=2;x+=2;y+=2;
int cps[8][2]={{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1},{-2,1},{-2,-1}};
block[x][y]=true;
for(int i=0;i<8;i++){
block[x+cps[i][0]][y+cps[i][1]]=true;
}
cb[1][2]=1;
for(int i=2;i<=n;i++){
for(int j=2;j<=m;j++){
if(!block[i][j]){
cb[i][j]=cb[i-1][j]+cb[i][j-1];
}
}
}
cout<<cb[n][m]<<endl;
return 0;
}