code(vs)1219 骑士游历 (棋盘dp)

来源:互联网 发布:发工资条软件 编辑:程序博客网 时间:2024/04/19 14:38

题目描述 Description

设有一个n*m的棋盘(2≤n≤50,2m≤50),如下图,在棋盘上有一个中国象棋马。

规定:

1)马只能走日字

2)马只能向右跳

问给定起点x1,y1和终点x2,y2,求出马从x1,y1出发到x2,y2的合法路径条数。

输入描述 Input Description

第一行2个整数n和m

第二行4个整数x1,y1,x2,y2

输出描述 Output Description

输出方案数

样例输入 Sample Input

30 30

1 15 3 15

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

2<=n,m<=50

这道题和之前的过河卒的思路是一样的,如果不懂的话建议去看一下我的过河卒那个博客,下面直接上代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){    int n, m, x1, y1, x2, y2;    long long dp[55][55];    scanf("%d%d", &n, &m);    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);    memset(dp, 0, sizeof(dp));    dp[x1][y1] = 1;    for(int i = x1; i <= x2; i++)    {        for(int j = 1; j <= n; j++)        {            if(i-1>=0 && j-2>=0)                dp[i][j] += dp[i-1][j-2];            if(i-1>=0 && j+2<=n)                dp[i][j] += dp[i-1][j+2];            if(i-2>=0 && j-1>=0)                dp[i][j] += dp[i-2][j-1];            if(i-2>=0 && j+1<=n)                dp[i][j] += dp[i-2][j+1];        }    }    printf("%lld\n", dp[x2][y2]);}




0 0
原创粉丝点击