洛谷[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}\) 在不考虑那只讨厌的马的情况下,对于任 ...
随机推荐
- Think in Java笔记——Java与对象
最近在重新学习Java,在阅读Java的经典著作——Java编程思想,因此每天记录阅读的心得. 当听到Java这个词时,大家一般想到的是面向对象,确实Java相对于C/C++这两门语言来说,Java最 ...
- Xshell5 访问虚拟机Ubuntu16.04
1.Ubuntu安装telnet 安装openbsd-inetd sudo apt-get install openbsd-inetd 安装telnetd sudo apt-get install t ...
- 二进制文件和ASCII文件有何区别
二进制文件和ASCII文件(即文本文件)的区别,对于和计算机亲近时间尚短的同学是个难题. 1.一个例子:两种100000 有程序: #include<iostream> using nam ...
- 创建一个 SQLite 数据库
首先,我们学习如何创建一个SQLite 数据库.如果想要在data/example.sqlite 这个路径中创建一个示例数据库,就必须确保该路径存在.如果该路径不存在,就必须先创建路径:if (!di ...
- IE8 JSON is not defined
问题原因: 昨天遇到了一个问题.就是用ajax从后台查询数据时,返回信息无法显示,经过提示发现是IE控制台提示: JSON is not defined 错误. 而且这个问题在本人自己的电脑上是不存在 ...
- spark + cassandra +postgres +codis 大数据方案
1.环境: 1.1.cassandra 集群: 用于日志数据存储 1.2.spark集群: 用户后期的实时计算及批处理 1.3.codis 集群: 用于缓存一些基本数据如IP归属地,IP经纬度等,当日 ...
- flask学习(十三):过滤器
1. 介绍和语法 介绍:过滤器可以处理变量,把原始的变量经过处理后再展示出来,作用的对象是变量
- ArcGIS 10 Raster Calculator 在哪儿
ArcGIS 10 Raster Calculator 在哪儿? 现在大家用的最多的是ArcGIS9.3,所以大家都知道Raster Calculator在ArcToolbox->Spatial ...
- openfalcon源码分析之transfer
本节内容 transfer功能 transfer接收数据来源 transfer数据去向 transfer的一致性hash transfer的一致性hash key的计算 transfer源码分析 2. ...
- grub2 详解
grub2详解(翻译和整理官方手册) 分类: Linux 基础篇,Linux 杂项 本文原创地址在博客园:https://www.cnblogs.com/f-ck-need-u/archive ...