博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP 马拦过河卒
阅读量:6245 次
发布时间:2019-06-22

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

描述

棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

格式

输入格式

一行四个数据,分别表示B点坐标和马的坐标。

输出格式

一个数据,表示所有的路径条数。

样例1

样例输入1

 
6 6 3 3

样例输出1

 
6

限制

每个测试点1s

分析:DP

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 int bx,by; 9 int mx,my;10 int f[30][30];//f[i][j]表示到达 (i,j) 点的移动方案 f[i][j]=sigma f[i][j+1] f[i-1][j] 11 bool can[30][30];12 int a[30]={ 0,-1,1};13 int b[30]={ 0,-2,2};14 int main(){15 16 scanf("%d%d%d%d",&bx,&by,&mx,&my);17 f[0][0]=1;18 can[mx][my]=true;19 can[0][0]=true;20 21 for(int i=1;i<=2;i++)22 for(int j=1;j<=2;j++)23 can[mx+a[i]][my+b[j]]=true,can[mx+b[j]][my+a[i]]=true;24 25 /*26 can[mx-2][my-1]=can[mx-2][my+1]=can[mx+2][my-1]=can[mx+2][my+1]=true;27 can[mx-1][my-2]=can[mx-1][my+2]=can[mx+1][my-2]=can[mx+1][my+2]=true;28 */ 29 for(int i=0;i<=bx;i++){30 for(int j=0;j<=by;j++){31 if(can[i][j]!=true){32 if((can[i-1][j]!=true||(i-1==0&&j==0))&&i-1>=0&&j>=0)33 f[i][j]+=f[i-1][j];34 if((can[i][j-1]!=true||(i==0&&j-1==0))&&i>=0&&j-1>=0)35 f[i][j]+=f[i][j-1];36 }37 }38 }39 cout<

 

转载于:https://www.cnblogs.com/CXCXCXC/p/4780393.html

你可能感兴趣的文章
mariadb操作审计
查看>>
Vmawre vsphere 5.5之SSD存储设置
查看>>
Linux CentOS 永久设置别名Alias
查看>>
JavaScript ES6箭头函数指南
查看>>
通过Gradle来取的Jenkins的build
查看>>
Hadoop基础入门学习笔记(基本概念)
查看>>
MongoDB复制集
查看>>
windows系统之WSUS服务器:更改WSUS更新文件的路径
查看>>
highlight testing
查看>>
Python中的module,library,package之间的区别
查看>>
如何处理JSON中的特殊字符
查看>>
客来乐:变革与升级,用技术点燃智慧时代
查看>>
批量创建导入导出域用户
查看>>
Access、Hybrid和Trunk三种模式的理解(转帖)
查看>>
Linux入门(二)
查看>>
创建Writable Materialized View在DB之间增量同步数据
查看>>
运维工程师的职责和前景(一)
查看>>
iptables在网络中的两个经典应用
查看>>
python 异常学习3---python异常except语句用法与引发异常
查看>>
通过测试发现的Exchange 2013 CU16存在的一个小bug
查看>>