18.07.01 luoguP1002 过河卒

题目描述

棋盘上 AA 点有一个过河卒,需要走到目标 BB 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 CC 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示, AA 点 (0, 0)(0,0) 、 BB 点 (n, m)(n,m) ( nn , mm 为不超过 2020 的整数),同样马的位置坐标是需要给出的。

现在要求你计算出卒从 AA 点能够到达 BB 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入输出格式

输入格式:

一行四个数据,分别表示 BB 点坐标和马的坐标。

输出格式:

一个数据,表示所有的路径条数。

输入输出样例

输入样例#1:

6 6 3 3

输出样例#1:

6

说明

结果可能很大!

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <math.h>
 5
 6 using namespace std;
 7 long long ans;
 8 int  xb, yb, xh, yh;
 9 int dir1[2] = { 0,1 }, dir2[2] = { 1,0 };
10 int p1[9] = { 1,-1,2,-2,2,-2,1,-1,0 }, p2[9] = { 2,2,1,1,-1,-1,-2,-2,0 };
11 long long record[25][25];
12
13 long long dfs(int x,int y) {
14     if (x == xb && y == yb)
15     {
16         return 1;
17     }
18     if (x > xb || y > yb)
19         return 0;
20     if (record[x][y] != 0)
21         return record[x][y];
22     long long tmp = 0;
23     for (int i = 0; i <= 1; i++) {
24         int xx = x + dir1[i], yy = y + dir2[i];
25         bool flag = true;
26         for (int j = 0; j <= 8; j++) {
27             int c1 = xh + p1[j], c2 = yh + p2[j];
28             if (c1 == xx && c2 == yy) {
29                 flag = false;
30                 break;
31             }
32         }
33         if (flag)
34             tmp += dfs(xx, yy);
35     }
36     record[x][y] = tmp;
37     return tmp;
38 }
39
40 int main()
41 {
42     scanf("%d%d%d%d", &xb, &yb, &xh, &yh);
43     ans=dfs(0, 0);
44     printf("%lld\n", ans);
45     return 0;
46 }

注意要dp不然要TLE

注意要所有答案相关的数据类型都要设成 long long ,不然会WA

原文地址:https://www.cnblogs.com/yalphait/p/9249424.html

时间: 2024-10-08 17:37:13

18.07.01 luoguP1002 过河卒的相关文章

AOJ 763.过河卒

过河卒 Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MBTotal Submission: 23   Submission Accepted: 5 Description 在一个n*m的矩阵上,A点有一个过河卒,需要走到目标B点.卒行走的规则:只能向下或者向右.每一步能水平或者垂直移动一个点(纵横线的交叉点)的距离.计算从A 点能够到达B点的路径的条数.设行.列数为m和n, 2<=m,n<=20 Input

过河卒

过河卒 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 941  Solved: 206 Description 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图中的C点和P1,……,P8,卒不能通过对方马的控制点.棋盘用坐标表示,A点(0,0).B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的

1010 过河卒

1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例如上图 C 点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A

NOIP 马拦过河卒

描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘用坐标表示,A点(0, 0).B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的.现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步. 格式 输入格式 一行四个数据,分别表示B点坐标和马的坐标. 输出格式 一个数据,表示所有的

【回溯法】马拦过河卒

问题 I: [回溯法]马拦过河卒 时间限制: 1 Sec  内存限制: 128 MB提交: 43  解决: 13[提交][状态][讨论版] 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘用坐标表示,A点(0, 0).B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的.现在要求你计算出卒从A点能够到达B点的路径的条数

洛谷P1002 过河卒

看到就顺便做了 NOIP2002普及组.那个年代还没有int64,不得不用高精算,然而现在一个long long就解决了.感受到了时代的进步呢. 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘用坐标表示,A点(0, 0).B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的. 现在要求你计算出卒从A点能够到达B点的路

luogu P1002 过河卒

题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘用坐标表示,A点(0, 0).B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的. 现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步. 输入输出格式 输入格式: 一行四个数据,分别表示B点坐标和马的坐标. 输出格式: 一

【例3.6】过河卒(Noip2002)

[题目描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,--,P8,卒不能通过对方马的控制点.棋盘用坐标表示,A点(0,0).B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的,C≠A且C≠B.现在要求你计算出卒从A点能够到达B点的路径的条数. [输入] 给出n.m和C点的坐标. [输出] 从A点能够到达B点的路

马拦过河卒心得体会

题目棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过河卒". 棋盘用坐标表示,A点(0, 0).B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的.现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步. 输入一行四个数据,分别表示B点坐标和马的坐标.(保证所有的数据有解) 输出一个数据