博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【例3.6】过河卒(Noip2002)
阅读量:4980 次
发布时间:2019-06-12

本文共 1335 字,大约阅读时间需要 4 分钟。

【例3.6】过河卒(Noip2002)

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1314
时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,……,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的,C≠A且C≠B。现在要求你计算出卒从A点能够到达B点的路径的条数。

【输入】

给出n、m和C点的坐标。

【输出】

从A点能够到达B点的路径的条数。

【输入样例】

8 6 0 4

【输出样例】

1617 题解:因为只有两个方向,可dp,第(i,j)点路径由第(i-1,j)+(i,j-1)点路径得,只要是马的控制点就设为不通,遍历边界时若有控制点则后面都没有路径,当正式遍历时路径变为0,负责-1与1抵消
#include
#include
#include
using namespace std;long long mp[25][25];int a[8][2]={
{
1,2},{
1,-2},{
2,1},{
2,-1},{-1,2},{-1,-2},{-2,1},{-2,-1}};int main(){ int mx,my,cx,cy; cin>>mx>>my>>cx>>cy; mp[cx][cy]=-1; for(int i=0;i<8;i++) { int x=cx+a[i][0],y=cy+a[i][1]; if(x>=0&&x<=mx&&y>=0&&y<=my)mp[x][y]=-1; } for(int i=0;i<=mx;i++) if(mp[i][0]==-1)break; else mp[i][0]=1; for(int j=0;j<=my;j++) if(mp[0][j]==-1)break; else mp[0][j]=1; for(int i=0;i<=mx;i++) for(int j=0;j<=my;j++) { if(mp[i][j]==-1)mp[i][j]=0; else if(i>0&&j>0)mp[i][j]=mp[i-1][j]+mp[i][j-1]; } cout<
<

 

转载于:https://www.cnblogs.com/EdSheeran/p/7672444.html

你可能感兴趣的文章
迭代dict的value
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
Py 可能是最全面的 python 字符串拼接总结(带注释版)
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>
OPENSSL使用方法
查看>>
开发WINDOWS服务程序
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(6)——Fiddler
查看>>
Intellij Idea新建web项目(转)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
centos iptables
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>