洛谷[P1002]过河卒
原题地址:https://www.luogu.org/problemnew/show/P1002
题目描述
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的。
现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
输入输出格式
输入格式:
一行四个数据,分别表示B点坐标和马的坐标。
输出格式:
一个数据,表示所有的路径条数。
输入输出样例
输入样例 | 输出样例 |
---|---|
6 6 3 3 | 6 |
8 7 3 2 | 102 |
14 16 4 5 | 10560723 |
20 20 10 10 | 21388094780 |
20 20 4 0 | 56477364570 |
思路
用一个21*21的二维数组来表示棋盘上的每一个点,数组的值代表能到达该点的方法数,-1代表不能到达该点,通过对数组的遍历,到达每一个点的方法等于到达该点上边与到达该店左边的方法数之和。
由于结果可能很大,所以二维数组的类型为long long。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m,n,x,y;
long long a[21][21]={0};//因为答案数据可能会很大,所以用long long类型
cin>>n>>m>>x>>y;
/******将马所在的位置点,以及马的控制点取值为-1******/
//-1 代表不可达到的位置
a[x][y] = -1;
if(x - 1 >= 0 && y - 2 >= 0) a[x-1][y-2] = -1;
if(x - 2 >= 0 && y - 1 >= 0) a[x-2][y-1] = -1;
if(x - 2 >= 0 && y + 1 <= m-1) a[x-2][y+1] = -1;
if(x - 1 >= 0 && y + 2 <= m-1) a[x-1][y+2] = -1;
if(x + 1 <= n && y + 2 <= m) a[x+1][y+2] = -1;
if(x + 2 <= n && y + 1 <= m) a[x+2][y+1] = -1;
if(x + 2 <= n && y - 1 >= 0) a[x+2][y-1] = -1;
if(x + 1 <= n && y - 2 >= 0) a[x+1][y-2] = -1;
int i,j;
/******从A点开始遍历******/
for( i=0;i<=n;i++ ){
for( j=0;j<=m;j++ ){
if( a[i][j] == -1 )continue;
if( i==0&&j==0 ){//将A点赋值为1
a[i][j]=1;
continue;
}
//每个点初始化为0,则能到达该点方法数等于其左边与上边的方法数之和
a[i][j] = 0;
if( j-1>=0&&a[i][j-1]!=-1 ){
a[i][j] += a[i][j-1];
}
if( i-1>=0&&a[i-1][j]!=-1 ){
a[i][j] += a[i-1][j];
}
if( a[i][j]==0 )a[i][j]=-1;//如果该点的左边及上边均为-1,则改点为无法到达的点。赋值为-1
}
}
if( a[n][m]==-1 )cout<<"0";
else cout<<a[n][m];
}
洛谷[P1002]过河卒的更多相关文章
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- 洛谷P1002 过河卒 [2017年4月计划 动态规划15]
P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...
- 洛谷P1002——过河卒
又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...
- 洛谷 P1002 过河卒 【棋盘dp】
题目链接:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
- 洛谷P1002 过河卒
关于蒟蒻的我,刚刚接触DP.... 那么就来做一道简单DP吧.... 首先先看题: 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一 ...
- 洛谷P1002 过河卒【dp】
棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过河卒 ...
- 洛谷——P1002 过河卒||codevs——T1010 过河卒
https://www.luogu.org/problem/show?pid=1002#sub||http://codevs.cn/problem/1010/ 题目描述 棋盘上A点有一个过河卒,需要走 ...
- 【做题笔记】洛谷P1002过河卒
虽说是 dp 入门题,但还是有很多细节需要注意 如果设 \(f_{x,y}\) 为目标地点为 \((x,y)\) 时走的种数,那么答案就是 \(f_{n,m}\) 在不考虑那只讨厌的马的情况下,对于任 ...
随机推荐
- POJ 1122 FDNY to the Rescue!(最短路+路径输出)
http://poj.org/problem?id=1122 题意:给出地图并且给出终点和多个起点,输出从各个起点到终点的路径和时间. 思路: 因为有多个起点,所以这里反向建图,这样就相当于把终点变成 ...
- MySQL 5.7.17 Windows安装和启动
1.在官网http://dev.mysql.com/downloads/下载 MySQL Community Server 2.解压后是这个样子(5.7.18解压后没有my-default.ini文件 ...
- 带宽检测工具iftop
1.安装 # yum install iftop –y 2.使用 # iftop -i eth0 -n # iftop -i eth0 -P 说明: 中间的<= =>这两个左右箭头,表示的 ...
- PowerDesigner16工具学习笔记-创建RQM
1.点击标准工具条中的
- 2-14-1 MySQL基础语句,查询语句
一. SQL概述 结构化查询语言(Structured Query Language)简称SQL 1. 它是一种特殊目的的编程语言 2. 它还是一种数据库查询和程序设计语言 (用于存取数据以及查询.更 ...
- 解决Myeclipse闪退问题
才安装好Myeclipse就出了问题,打开之后没过多久就自动退出了,看了好多解决方法都无效,后来才找到正确路径,转载过来方便跟我遇到同样问题的小伙伴,尽快解决 转载自:http://blog.csdn ...
- 201621123005《Java程序设计》实验总结
201621123005<Java程序设计>第七次实验总结 1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最 ...
- java基础第6天
面向对象 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始改进,能不能把这些步骤和功能再进行封装,封装时根据不 ...
- Portability Flaw Locale Dependent Comparison
Portability Flaw Locale Dependent Comparison [问题描述] 该问题涉及String的toUpperCase()方法.具体通过例子演示相关现象. public ...
- php http build query
http_build_query (PHP 5, PHP 7) http_build_query — 生成 URL-encode 之后的请求字符串 说明¶ string http_build_quer ...