1.过河卒(NOIP2002普及组)
http://codevs.cn/problem/1010/
算法:状态转移就是向下和向右两个方向,方程很好写。
PS:用记忆化搜索更方便一些。
代码:
#include<bits/stdc++.h>
#define MAX_N 20
using namespace std;
long long f[MAX_N][MAX_N];
int n, m, X, Y;
long long search(int x, int y)
{
if ((x > n) || (y > m)) return 0;
if ((abs(x-X) == 1) && (abs(y-Y) == 2)) return 0;
if ((abs(x-X) == 2) && (abs(y-Y) == 1)) return 0;
if ((x == X) && (y == Y)) return 0;
if (f[x][y] != 0) return f[x][y];
f[x][y] = search(x+1, y) + search(x, y+1);
return f[x][y];
}
int main()
{
cin >> n >> m >> X >> Y;
memset(f,