洛谷P1102 过河卒
P1102 过河卒
链接在此
过河卒
此题如果直接忽略掉马的影响的话,可以看出很简单的递推规律
即
\]
也就是说,由于卒只能走直线且每次只能向下或向右走一步,那么,要到达第(i,j)点,卒只能从(i-1,j)点以及(i,j-1)这两个点来达到。因此,卒走到第(i,j)点的路径条数即为卒走到第(i-1,j)以及(i,j-1)点的路径条数和,以此类推,因此只需要初始化初值条件就可以推出答案
但是这里我们加上了一个限制条件,也就是马能触及到的地方不能走,当然所在的地方更不能走(容易忘)
所以我们在原先的递推上将这些点标记起来(可以用一些特殊值如-1或者开个bool数组来进行标记),当递推的时候我们直接略过这些点
举个例子
对于点(2,2),\(dp[2][2]=dp[1][2]+dp[2][1]\),但是明显点(1,2)是不可经过的点,因此\(dp[2][1]\)应该恒等于0,因为没有任何一条路径会经过它。所以此时\(dp[2][2]=dp[1][2]\)
AC代码如下
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int offsetx[8] = { +2,+1,-1,-2,-2,-1,+1,+2 };
const int offsety[8] = { +1,+2,+2,+1,-1,-2,-2,-1 };
//马偏移量记录
long long Map[30][30];
//结果记录,不开longlong会爆掉
int main()
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
for (int i = 0; i < 8; i++)
{
int x = x2 + offsetx[i];
int y = y2 + offsety[i];
if (x >= 0 && y >= 0 )//保证不出界
Map[x][y] = -1;
//这里采取将所有不可经过点标记为-1
}
if (x2 >= 0 && y2 >= 0)//马所在的那个点也要标记-1
Map[x2][y2] = -1;
for (int i = 0; i <= x1; i++)
if (Map[i][0] != -1)
Map[i][0] = 1;
else
break;
for (int i = 0; i <= y1; i++)
if (Map[0][i] != -1)
Map[0][i] = 1;
else
break;
//以上两步是将dp数组的边界初始化为1(很容易想到边界的值都为1)
//但是要注意一旦遇到不可经过点处于边界上时,此后的Map[i][j]一律为0
//因为对于边界点Map[i][0](Map[0][i])=Map[i-1][0],而如果(i-1,0)这个点为-1,意味着无法经过这个点到达后面的点,因此此时Map[i][0]=0
for (int i = 1; i <= x1; i++)
for (int j = 1; j <= y1; j++)
{
if (Map[i][j] != -1)//跳过不可经过点
{
if (Map[i - 1][j] != -1)//判断是否为-1
Map[i][j] += Map[i - 1][j];
if (Map[i][j - 1] != -1)
Map[i][j] += Map[i][j - 1];
}
}
cout << Map[x1][y1] << endl;
return 0;
}
洛谷P1102 过河卒的更多相关文章
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- 洛谷P1002——过河卒
又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...
- 洛谷 P1002 过河卒 【棋盘dp】
题目链接:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷[P1002]过河卒
原题地址:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 洛谷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 过河卒 [2017年4月计划 动态规划15]
P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...
- 洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
- 【做题笔记】洛谷P1002过河卒
虽说是 dp 入门题,但还是有很多细节需要注意 如果设 \(f_{x,y}\) 为目标地点为 \((x,y)\) 时走的种数,那么答案就是 \(f_{n,m}\) 在不考虑那只讨厌的马的情况下,对于任 ...
随机推荐
- 《3D编程模式》写书记录
本书介绍 本书罗列了我从自己的实战项目中提炼出来的关于3D编程(主要包括"3D引擎/游戏引擎"."编辑器"开发)的各种编程模式 所有的写书记录 <3D编程 ...
- Vue中使用el-menu高亮显示问题
https://blog.csdn.net/weixin_43336525/article/details/132541500 <template> <el-menu :defaul ...
- 机器学习-决策树系列-决策树-ID3算法 -C4.5算法-26
目录 1. 决策树 2. 举个例子 计算信息增益 3. C4.5算法 1. 决策树 决策树是属于有监督机器学习的一种,起源非常早,符合直觉并且非常直观, 模型生成:通过大量数据生成一颗非常好的树,用这 ...
- Linux查看文件内容与处理文件
Linux查看文件内容与处理文件 目录 Linux查看文件内容与处理文件 查看文件内容 1.查看文件类型 2.查看整个文件 3.查看部分文件 处理文件 1.创建空文件 2.过滤文件内容 3.统计文件内 ...
- Go——语言特性
golang 简介 来历 很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目.在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括 ...
- MySQL重建表统计信息
MySQL重建表统计信息 背景 最近一段时间遇到了一些性能问题 发现很多其实都是由于 数据库的索引/统计信息不准确导致的问题. Oracle和SQLServer都遇到了很多类似的问题. 我这边联想到 ...
- [转帖]Web技术(七):如何使用并实现MQTT 消息订阅-发布模型?
文章目录 一.什么是发布-订阅消息模型? 二.订阅-发布消息模型有哪些应用? 2.1 应用于IP 物联网络中的消息传递 2.2 应用于操作系统进程间的消息传递 2.3 应用于MESH 自组网中的消息传 ...
- [转帖]SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes
https://www.cnblogs.com/klb561/p/11013774.html SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击.但是在特定情况下,严格的 SSH 公钥 ...
- [转帖]如何通过shell脚本对一个文件中的所有数值相加并求和
https://developer.aliyun.com/article/886170?spm=a2c6h.24874632.expert-profile.255.7c46cfe9h5DxWK 1.背 ...
- Ant Design Vue中Table对齐方式显示省略号
Ant Design Vue中Table对齐方式显示省略号 <template> <!-- bordered 表示表格中的边框 pagination="false" ...
