题目描述:
棋盘上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点的路径的条数。
输入样例:
8 6 0 4
输出样例:
1617
通过代码:
#include <bits/stdc++.h> #define ll long long int #define range(_iter,_start,_end) for(long long _iter = _start;_iter <= _end;_iter ++) using namespace std; struct axis{ll x,y;void init(){scanf("%lld%lld",&x,&y);} }B,C; ll a[50][50],avl[50][50]; const ll dx[] = {-1,-2,-2,-1,1,2,2,1}; const ll dy[] = {-2,-1,1,2,2,1,-1,-2}; int main(){B.init();C.init();avl[C.x][C.y] = 1;range(i,0,7)if(C.x + dx[i] >= 0 && C.y + dy[i] >= 0)avl[C.x + dx[i]][C.y + dy[i]] = 1;range(i,0,B.x)range(j,0,B.y)if(!avl[i][j]){if(i == 0 && j == 0)a[i][j] = 1;else if(i == 0)a[i][j] = a[i][j - 1];else if(j == 0)a[i][j] = a[i - 1][j];elsea[i][j] = a[i - 1][j] + a[i][j - 1];}printf("%lld",a[B.x][B.y]);return 0; }
详细解决方案
1314:【例3.6】过河卒(Noip2002)
热度:9 发布时间:2024-02-12 05:58:20.0
相关解决方案
- HRBUST 1314 火影忍者之~纲手【MAP】
- 洛谷 P1002 [NOIP2002 普及组] 过河卒(dp)
- [NOIP2002]选数
- 洛谷——P1036 [NOIP2002 普及组] 选数
- 两个整数排序【1314】
- c语言刷题洛谷P1036 [NOIP2002 普及组] 选数(深度优先算法搜索)
- 【[NOIP2002 普及组] 选数】题解
- intellij idea 1314 插件推荐及快速上手
- 贪心算法 均分纸牌(NOIP2002)
- 洛谷 P1034 [NOIP2002 T4] 矩形覆盖
- 洛谷 P1033 [NOIP2002 T3] 自由落体
- 【算法1-4】递推与递归——P1036 [NOIP2002 普及组] 选数
- 1314:【例3.6】过河卒(Noip2002)
- 动态规划——1314. 矩阵区域和
- Leetcode 1314. 矩阵区域和 转化二维前缀和
- 1314. Matrix Block Sum 详细解答
- PigyChan_LeetCode 1314. 矩阵区域和难度中等
- 1314.矩阵区域和