题目链接:
http://codevs.cn/problem/1219/
很简单的棋盘DP,最水的状态转移(单纯的状态累加)
题意:给你一个马在(x1,y1),只能向右跳,求能跳到(x2,y2)的方案数
代码如下:
#include <bits/stdc++.h>
#define Maxn 55
using namespace std;
typedef long long ll;
ll dp[Maxn][Maxn];
int n,m,sx,sy,tx,ty;
int dx[4] = {1,1,2,2};//x·½Ïò×ÜÊÇÏòÓÒ
int dy[4] = {2,-2,-1,1};
int main()
{
scanf("%d%d",&n,&m);
scanf("%d%d%d%d",&sx,&sy,&tx,&ty);
dp[sx][sy] = 1;//Æðµã
for(int i = 1;i <= n;i ++)//ÄÔ²ÐÒ׶®µÄתÒÆ
{
for(int j = 1;j <= m;j ++)
{
for(int k = 0;k < 4;k ++)
{
int xx = i + dx[k];
int yy = j + dy[k];
if(xx < 1 || yy < 1 || xx > n || yy > m) continue;
dp[xx][yy] += dp[i][j];
}
}
}
printf("%lld\n",dp[tx][ty]);
return 0;
}
//16.10.08(每日一题)