洛谷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}\) 在不考虑那只讨厌的马的情况下,对于任 ...
随机推荐
- vue 调试工具vue-devtools 安装
一.下载 工具vue-devtools 注:必须是5.1.1版本 比这个版本高的试过,没法正确使用. https://github.com/vuejs/vue-devtools/tree/v5.1.1 ...
- 实时渲染前沿研究:在浏览器上实现了Facebook提出的DLSS算法
大家好,我基于WebNN在浏览器上实现了2020年Facebook提出的Neural-Supersampling-for-Real-time-Rendering算法.它是一个用于实时渲染的神经网络超采 ...
- 简单的winform学生管理系统Demo
界面效果 练习重点 1. 关系表的创建 2. 增删改查的操作,及sqlhelper的封装 3. 跨页面数据传递,编辑页数据提交后数据局步刷新到列表数据 项目源码 FrmStuddentList pub ...
- SV概述
System Verilog概述 路科验证视频,B站可看(补充一下知识) 学习SV之前,最好有Verilog基础 SV诞生 SV发展历史 Verilog - 偏向于设计 System Verilog ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.14)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]《AWK程序设计语言》笔记(1)—— AWK入门与简单案例
原文为 <The AWK Programming Language>,GitHub上有中译版,不过有些内容翻译的比较奇怪,建议跟原版对照着看 https://github.com/wuzh ...
- [转帖]Linux系统中的Page cache和Buffer cache
Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...
- [转帖]使用SkyWalking监控nginx (以openresty为例)
https://www.cnblogs.com/hahaha111122222/p/15829737.html 安装使用SkyWalking先看这篇文章,地址:https://www.cnblogs. ...
- Redis 的简单学习与整理
Redis 的简单学习与整理 背景 最近一直进行Redis性能调优和高可用的课题 但是不管什么课题,第一步应该是学习与使用redis 之前总结过 rdb 与 rdr 分析 键值对等内容. 但是发现想要 ...
- axios发送请求时携带token
请求头携带token async getUserlist(){ // 需要授权的Api,必须在青丘头中使用Authorization 字段提供token令牌 const AUTH_TOKEN=loca ...
