关于蒟蒻的我,刚刚接触DP....
那么就来做一道简单DP吧....
首先先看题:
题目描述
棋盘上AA点有一个过河卒,需要走到目标BB点。卒行走的规则:可以向下、或者向右。同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,AA点(0, 0)(0,0)、BB点(n, m)(n,m)(nn, mm为不超过2020的整数),同样马的位置坐标是需要给出的。
现在要求你计算出卒从AA点能够到达BB点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
输入输出格式
输入格式:
一行四个数据,分别表示BB点坐标和马的坐标。
输出格式:
一个数据,表示所有的路径条数。
输入输出样例
6 6 3 3
6
说明
结果可能很大!
虽然简单,但AC过程还是那样艰巨...(好吧这道题因为简单有的人还在考虑它到达算不算DP...
废话少说,呈上AC代码,简单易懂...
此题一定要注意数据可能很大,要用long long类型!!!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn = ; ll ans[maxn][maxn]; //用来存储答案(路径个数)
int vis[maxn][maxn]; //用来将卒不能走的点打标记
int dir1[] = {,,,,-,-,-,-}; //将马的横坐标变化方式存入dir1数组中
int dir2[] = {,-,,-,,-,,-}; //将马的纵坐标变化方式存入dir2数组中 int main()
{
int n,m,cx,cy; //用cx、cy分别存储马坐标的横纵坐标
cin>>n>>m>>cx>>cy;
memset(vis, , sizeof(vis)); //将打标记的vis数组进行初始化
vis[cx][cy] = ;//首先将马的坐标打标记,卒不能通过
for(int i = ; i < ; ++i){
int a = cx + dir1[i]; //用a来存储马能够达到的横坐标
int b = cy + dir2[i]; //用b来存储马能够达到的纵坐标
if(a >= && b >= && a <= n && b <= n){
vis[a][b] = ; //首先判断a、b两坐标所表示的点是否合法(即是否在棋盘中),然后将这个点标记为1,即卒不能到达
}
}
ans[][] = ; //从起点到起点的方案数为0(废话 构造递推式
for(int i = ; i <= n; ++i){
for(int j = ; j <= m; ++j){
if(i){ //若i为零,则不考虑上边的情况
if(vis[i][j]) ans[i][j] = ; //如果vis被标为1(即卒不能通过),则方案数为0
else ans[i][j] += ans[i-][j]; //如果vis仍为0 (即卒能通过),则进行递推
}
if(j){ //若j为零,则不考虑左边的情况
if(vis[i][j]) ans[i][j] = ; //如果vis被标为1(即卒不能通过),则方案数为0
else ans[i][j] += ans[i][j-]; //如果vis仍为0 (即卒能通过),则进行递推
}
}
}
cout<<ans[n][m]<<endl; //输出到(n,m)点方案数
return ;
}
洛谷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.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
-
洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
-
洛谷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}\) 在不考虑那只讨厌的马的情况下,对于任 ...
随机推荐
-
ALV详解:OO ALV
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
-
webstorm 10.0.4 注册码
激活码: UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA INauvJ ...
-
iOS开发-GCD和后台处理
一些生命周期函数的调用时间 打开应用时,调用 applicationWillEnterForeground: applicationDidBecomeActive: 按Home键,调用 applica ...
-
ps中常用的快捷键
ctrl+c 复制 ctrl+v 粘贴 ctrl+n 新建文件 ctrl+s 保存 空格键 手抓工具 ctrl+t *变形 ctrl+加号 放大 ctrl+减号 缩小 ctrl+r 标 ...
-
Java调用cmd命令 打开一个站点
使用Java程序打开一个站点 近期做了个东西使用SWT技术在一个client程序 须要升级时在提示升级 点击窗口上的一个连接 打开下载网页 花费了我非常长时间 用到了把它记录下来 怕是忘记,须要时能 ...
-
ubuntu下使用自带的openJDK查看java源码
如题 Ubuntu自带的OpenJDK仅仅有jre环境,不提供源代码,所以我们还是须要去下载. JDK6:http://download.java.net/openjdk/jdk6/ JDK7:htt ...
-
openwrt makefile选项
Package/conffiles (optional) 由该包安装的配置文件的列表,一行一个文件. BuildPackage宏 最重要的一个宏是 BuildPackage.它会在 Makefile ...
-
25个最佳最闪亮的Eclipse开发项目
http://blog.csdn.net/howareyoutodayyhz/article/details/8264599 25个最佳最闪亮的Eclipse开发项目 标签: eclipseEclip ...
-
VIM基础知识整理(附思维导图)
这是当时初学VIM后做的一个思维导图,图片稍大,所以从freemind导出了html文本po在下面:图片在最下方,放大可清晰浏览. VIM 普通模式 普通编辑命令 功能:浏览,普通编辑 x:删除光标所 ...
-
vue中mint-ui的index-list 在手机端滑动问题
官方的demo这里滑动很流畅,按着官网demo复制的在手机上必须手指拖着才能动,不能滑动: 加入 这段代码就行 -webkit-overflow-scrolling: touch; overflow- ...