洛谷 1002. P1002 [NOIP2002 普及组] 过河卒
原题链接
简单
作者:
蓬蒿人
,
2024-02-18 17:11:52
,
所有人可见
,
阅读 32
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
// 就是走方格 只能往右和往下走
// f[i][j]=f[i-1][j]+f[i][j-1];(i,j>=1)
//同时 把马能够攻击到的八个方位和马的位置标记出来 跳过这九个位置计算
typedef long long ll;
int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};//马走日的所有方位
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
bool st[30][30];
ll f[30][30];
int bx,by,mx,my;
int main () {
cin>>bx>>by>>mx>>my;
st[mx][my]=1;
f[0][0]=1;
for (int i=0;i<8;i++) {//标记不能走的点
int a=mx+dx[i];
int b=my+dy[i];
if (a<0 or a>bx or b<0 or b>by) continue;
st[a][b]=1;
}
for (int i=0;i<=bx;i++) {
for (int j=0;j<=by;j++) {
if (st[i][j]) continue;
if (i-1>=0) f[i][j]+=f[i-1][j];
if (j-1>=0) f[i][j]+=f[i][j-1];
}
}
cout<<f[bx][by];
return 0;
}
蓬蒿佬打周赛