Time Limit: 10 second

Memory Limit: 2 MB

问题描述

如图,A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。

同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为方马的控制点。例如上图C点上的马可以控制9个点(图中的P1,P2...P8和C)。卒不能通过对方的控制点。

棋盘用坐标表示,A点(0,0)、B点(n, m)(n,m为不超过20的整数,并由键盘输入),同样马 的位置坐标是需要给出的(约定:C≠A,同时C≠B)。现在要求你计算出卒从A点能够到达B点的路 径的条数。

Input

B点的坐标(n,m)以及对方马的坐标(X,Y) {不用判错}

Output

一个整数(路径的条数)。

Sample Input

8 6 0 4

Sample Output

1617

【题解】

这是个递推题,每个卒只能从左上和右上角到达。

设a[i][j]表示卒到达(i,j)这个点的方案数,a[i][j] = a[i][j-1] + a[i-1][j];

首先用一个二维的bool型数组bo[21][21]来表示各个点是否为马所占据。一开始所有的点都置为true.然后把马所在的位置和马跳一步能到的位置置为false。表示这些点不能放卒。接下来是边界,首先for i = 1;i <= xB;i++ 如果遇到的bo[i][0]==true则这个点a[i][0] = 1,如果为false则直接停止。不再往下置1;上边界也是一样的规律。

然后从(1,1)一直递推到XB,YB就可以了,用普通的int不能完整存下数据,要用double型来存。

【代码】

#include <cstdio>

int xb,yb,xm,ym;
double a[21][21];
bool bo[21][21]; void input_data()
{
scanf("%d %d %d %d",&xb,&yb,&xm,&ym);
for (int i = 0;i <= xb;i++)
for (int j = 0;j <= yb;j++) //一开始 所有的位置都能放
bo[i][j] = true;
for (int i = 0;i <= xb;i++) //到达所有点的方案数,都置为0.
for (int j = 0;j <= yb;j++)
a[i][j] = 0;
int x0,y0; //x0 y0是马能控制的点 bo[xm][ym] = false; //这是马所在的点 x0 = xm -1;y0 = ym-2; //接下来的多行都是用来标记马跳一步能到达的点。
if ( (x0 >= 0) && (y0 >=0))
bo[x0][y0] = false; x0 = xm -2;y0 = ym -1;
if ( (x0 >= 0) && (y0 >=0))
bo[x0][y0] = false; x0 = xm -2;y0 = ym+1;
if ( (x0 >= 0) && (y0 <=yb))
bo[x0][y0] = false; x0 = xm - 1;y0 = ym +2;
if ( (x0 >= 0) && (y0 <=yb))
bo[x0][y0] = false; x0 = xm +1;y0 = ym +2;
if ( ( x0 <= xb) && (y0 <= yb))
bo[x0][y0] = false; x0 = xm +2;y0 = ym+1;
if ( (x0 <= xb) && (y0 <= yb))
bo[x0][y0] = false; x0 = xm+1;y0 = ym-2;
if ( (x0 <= xb) && (y0 >=0))
bo[x0][y0] = false; x0 = xm +2;y0 = ym-1;
if ( (x0 <= xb) && (y0 >=0))
bo[x0][y0] = false;
} void get_ans()
{
for (int i = 0;i <= xb;i++) //接下来两个for循环 处理边界问题。
if (bo[i][0])
a[i][0] = 1;
else
break;
for (int i = 0;i <= yb;i++)
if (bo[0][i])
a[0][i] = 1;
else
break;
for (int i = 1;i <= xb;i++) //进行递推
for (int j = 1;j <= yb;j++)
if (bo[i][j])
a[i][j] = a[i-1][j] + a[i][j-1];
} void output_ans()
{
printf("%0.lf\n",a[xb][yb]); //%0.lf用来输出double,且不保留小数。
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}

【9307】&【a303】过河卒(NOIP2002)的更多相关文章

  1. 过河卒(Noip2002)(dp)

    过河卒(Noip2002) 时间限制: 1 Sec  内存限制: 128 MB提交: 7  解决: 6[提交][状态][讨论版][命题人:quanxing] 题目描述 棋盘上A点有一个过河卒,需要走到 ...

  2. 过河卒(NOIP2002)

    题目链接:过河卒 直接模拟?会T掉60分. 所以我们可以采用递推,怎么想到的? 因为卒子只能向下或向右走,所以走到一个点的方法数,等于走到它上面点的方法数加上走到它左边点的方法数,这样就可以地推了. ...

  3. 【openjudge】【递推】例3.6 过河卒(Noip2002)

    [题目描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1 ...

  4. LFYZ-OJ ID: 1020 过河卒(NOIP2002)

    过河卒 Proble Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃 ...

  5. noip2002 普及组 过河卒

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

  6. NOIP2002 过河卒(DFS,DP)

    https://www.luogu.org/problem/P1002 题目描述 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如 ...

  7. AC日记——过河卒 洛谷 1002

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

  8. NOIP 2002过河卒 Label:dp

    题目描述 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例如 ...

  9. ACM题目————马拦过河卒

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

随机推荐

  1. Leetcode5.Longest Palindromic Substring最长回文字串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  2. MaxCompute技术人背后的故事:从ApacheORC到AliORC

    2019大数据技术公开课第一季<技术人生专访>来袭,本季将带领开发者们探讨大数据技术,分享不同国家的工作体验.本文整理自阿里巴巴计算平台事业部高级技术专家吴刚的专访,将为大家介绍Apach ...

  3. MySQL数据库简单使用

    一.入门语句: 1.连接服务器: 命令:cd 安装目录\bin mysql -uroot -p 接着输入密码 ( 具体的是:mysql -u username-p password ) 远程连接MyS ...

  4. PyChram创建虚拟环境

    目录 1. python创建虚拟环境 2. pycharm中添加python虚拟环境 1. python创建虚拟环境 首先要安装virtualenv模块.打开命令行,输入pip install vir ...

  5. maven的配置和使用

    Maven 简介 1.1 Maven 是什么 翻译为“专家”,“内行” Maven是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.2 为什么使用Maven ...

  6. Mysql里查询字段为Json格式的数据模糊查询以及分页方法

    public void datagrid(CustomFormEntity customForm,HttpServletRequest request, HttpServletResponse res ...

  7. jquery 回车提交事件

    $("body").keydown(function(){ if(event.keyCode == "13"){ //13是回车键的位置 } })

  8. Effective Modern C++:01类型推导

    C++的官方钦定版本,都是以ISO标准被接受的年份命名,分别是C++98,C++03,C++11,C++14,C++17,C++20等.C++11及其后续版本统称为Modern C++. C++11之 ...

  9. bzoj2073 PRZ

    Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍 ...

  10. Ubuntu 如何编译安装第三方库

    在工程应用中都会用到第三方库,标准库是在我们安装IDE环境或系统自带已经编译好的库,我们是可以直接调用的,而第三方库需要我们自己下载,编译和安装后才能使用,这里我们说的是Ubuntu如何使用cmake ...