【题目描述】

棋盘上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点的路径的条数。

【输入样例】

【输出样例】

输入输出样例

【算法分析:】

20*20的格子用dfs会超时,标算应该是递推.

f[i][j]表示从点(0, 0)到达点(i, j)的路径条数,vis[i][j]为1表示点(i, j)是马的控制点

递推式由分类加法很容易得到:

  f[i][j] = f[i - 1][j] + f[i][j - 1];

i, j >= 1 、i <= n 、j <= m、vis[i][j] = 0

比较需要注意的是初始化:

不能只是把边界点赋成1,如果边界上有马的控制点就GG了..

如果这个点是马的控制点,其后的所有点都无法到达

有一种比较方便的初始化写法:

f[][] = vis[][] ^ ;
for(int i = ; i <= m; i++) f[][i] = f[][i - ] ^ vis[][i];
for(int i = ; i <= n; i++) f[i][] = f[i - ][] ^ vis[i][];

【代码:】

 #include<iostream>
#include<cstdio>
using namespace std; const int dx[] = {, , , , -, -, -, -};
const int dy[] = {, -, , -, , -, , -}; //注意开long long
long long n, m, xc, yc;
long long ans, f[][];
bool vis[][]; int main() {
scanf("%lld%lld%lld%lld", &n, &m, &xc, &yc);
vis[xc][yc] = ;
for(int i = ; i < ; i++) {
int xx = xc + dx[i], yy = yc + dy[i];
if(xx <= n && yy <= m && xx >= && yy >= )
vis[xc + dx[i]][yc + dy[i]] = ;
}
f[][] = vis[][] ^ ;
for(int i = ; i <= m; i++) f[][i] = f[][i - ] ^ vis[][i];
for(int i = ; i <= n; i++) f[i][] = f[i - ][] ^ vis[i][]; for(int i = ; i <= n; i++) {
for(int j = ; j <= m; j++) {
if(!vis[i][j])
f[i][j] = f[i - ][j] + f[i][j - ];
}
}
printf("%lld\n", f[n][m]);
}

【openjudge】【递推】例3.6 过河卒(Noip2002)的更多相关文章

  1. 过河卒(Noip2002)(dp)

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

  2. 过河卒(NOIP2002)

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

  3. 【9307】&【a303】过河卒(NOIP2002)

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右. 同时在棋盘上的任一点有一个对方 ...

  4. 洛谷 P1002过河卒

    洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...

  5. P1002 过河卒 【递推、简单动规】

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

  6. 【openjudge】【递推】例3.4 昆虫繁殖

    [题目描述] 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对卵要过两个月长成成虫.假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵 ...

  7. C语言程序设计100例之(20):过河卒

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

  8. 递推2--过河卒(Noip2002)

    递推2--过河卒(Noip2002) 一.心得 写出递推公式就OK了,具体编程还是很简单的 二.题目及分析 过河卒(NOIp2002) [问题描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的 ...

  9. 递推、数位DP解析(以HDU 2089 和 HDU 3555 为例)

    HDU 2089 不要62 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2089 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人 ...

随机推荐

  1. Windows应用程序对键盘与鼠标的响应

      编写程序: 设计一个窗口, 当单击鼠标左键时, 窗口中显示"LEFT BUTTON"; 当单击鼠标右键时, 窗口中显示"RIGHT BUTTON"; 当单击 ...

  2. java设计模式-----18、职责链模式

    概念: Chain of Responsibility(CoR)模式也叫职责链模式.责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的 ...

  3. MVC 客户端(Memo = "<img src="http://">")中检测到有潜在的危险的 Request.Form 值 的解决方案

    解释定义:ASP.NET为了阻止跨站脚本攻击,会对向服务器端输入的HTML代码进行防御措施,在使用.NET MVC中,可以对validateinput属性设置,但是,有时需要ASP.NET临时关闭这个 ...

  4. java泛型详解(加一点语法糖)

    首先请看如下代码: public class Test{ public static void main(String str[]) { Hashtable h =new Hashtable(); h ...

  5. JXU1NDRBJXU0RTJBJXU1MjJCJXU1NDI3

    U2FsdGVkX19f62S3+iSZxxJBADqNOfYV6/XumpnG7VwzMlQz7T7SaFsjyQx9d4PWAYQwtmgr4T9wDGKnKJCrR0veUEul6Uj4mEkN ...

  6. 安装部署OpenPAI + VSCode 提交

    ========================================================== 安装openpai请参考这篇 https://www.cnblogs.com/ji ...

  7. java应用破解之破解 jeb mips 2.3.3

    前言 jeb 的新版支持 mips的反编译 ,于是去官网申请一个试用版,试用版的限制还是比较多的,比如 使用时间验证,没法复制粘贴 等,于是想尝试看看能否破解,同时填了 java破解 这个坑. 修改版 ...

  8. Qt——元对象和属性机制

    http://www.cnblogs.com/hellovenus/p/5582521.html 一.元对象 元对象(meta object)意思是描述另一个对象结构的对象,比如获得一个对象有多少成员 ...

  9. 把梳子卖给和尚 引起的CRM

    招聘故事  N个人去参加一招聘,主考官出了一道实践题目:把梳子卖给和尚.众多应聘者认为这是开玩笑,最后只剩下甲.乙.丙三个人.   主持人交代:以10日为限,向我报告销售情况.  十 天一到.   主 ...

  10. Oracle EBS 启用关于此页

    FND:诊断英文为FND: Diagnostics,用于设置是否显示“关于此页”个性化自助定义英文为Personalize Self-Service Defn,用户设置在登录后,OAF页面是否显示“个 ...