递推2--过河卒(Noip2002)

一、心得

写出递推公式就OK了,具体编程还是很简单的

二、题目及分析

过河卒(NOIp2002)
【问题描述】
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A点(0, 0)、B点(n, m),(n, m为不超过20的整数),同样马的位置坐标是需要给出的。C≠A且C≠B。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

三、代码及结果

这里取起点:A(0,0)   终点:B(4,8)   马的位置:C(2,4)

 /*
过河卒问题
f[r][c]表示到达(r,c)位置的路径条数
只能从上面来或者从左边来
f[r][c]=从上面一行来+从左边一列来
f[r][c]=f[r-1][c]+f[r][c-1]
如果这点被马控制,那么:
f[r][c]=0;
所以从上往下,从左往右依次递推就好了
那些边界都为0,且f[0][0]=1
*/
#include <iostream>
#define Max 25
using namespace std;
//r在前c在后
int horseControl[][]={{,},{-,},{-,},{,},{,},{,-},{,-},{-,-},{-,-}};
int dp[Max][Max];//f[r][c]表示到达(r,c)位置的路径条数
int horse[Max][Max];//判断该点是否被马控制 // 初始化马的控制点
void initHorseControl(int r,int c){//马的坐标需要被传进来
horse[Max][Max]={};//对house初始化为0
for(int i=;i<;i++){
int r1=r+horseControl[i][];
int c1=c+horseControl[i][];
if(r1>=&&c1>=){
horse[r1][c1]=;
}
}
} //显示数组中的内容
void showArray(int x,int y,int a[Max][Max]){
for(int i=;i<=x;i++){
for(int j=;j<=y;j++){
printf("%5d ",a[i][j]);
}
printf("\n");
}
} // 初始化棋盘
void initChessboard(int r,int c){
for(int i=;i<=r;i++){//对列进行初始化
dp[i][]=;
}
for(int j=;j<=c;j++){
dp[][j]=;
}
dp[][]=;
} //递推操作
void dpOperation(int r,int c){
for(int i=;i<=r;i++){
for(int j=;j<=c;j++){
if(horse[i][j]==){//表示被马控制
dp[i][j]=;
}
else{
dp[i][j]=dp[i-][j]+dp[i][j-];
}
}
}
} int main(){
//是要算题中4,8的,但是我们存储的是线,有行5条,列9条
//
int r=,c=;//格子行和列,也就是目的点的坐标
int x=,y=;//马所在的点
cout<<"起点:A(0,0) 终点:B(4,8) 马的位置:C(2,4)"<<endl;
initHorseControl(x,y);// 初始化马的控制点
cout<<"---------------------------------------------------------------------"<<endl;
cout<<"马控制的点:"<<endl;
showArray(r,c,horse);
cout<<"---------------------------------------------------------------------"<<endl;
initChessboard(r,c);// 初始化棋盘
cout<<"初始化的棋盘:"<<endl;
showArray(r,c,dp);
cout<<"---------------------------------------------------------------------"<<endl;
dpOperation(r,c);//递推操作
cout<<"进行了路径计算后的棋盘:"<<endl;
showArray(r,c,dp);
cout<<"---------------------------------------------------------------------"<<endl;
cout<<"A点到B点的路径条数是:"<<dp[r][c]<<endl;
return ;
}

递推2--过河卒(Noip2002)的更多相关文章

  1. 过河卒(Noip2002)(dp)

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

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

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

  3. 过河卒(NOIP2002)

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

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

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

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

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

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

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

  7. NOIP2002 过河卒(DFS,DP)

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

  8. noip2002 普及组 过河卒

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

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

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

随机推荐

  1. wcf 服务器无法处理请求由于内部错误

    The server was unable to process the request due to an internal error.  For more information about t ...

  2. ExtJs中XTemplate使用(转)

    转自http://www.studyofnet.com/news/408.html 本文导读:XTemplate是Ext.Template扩展的新类,它支持高级功能的模板类,如自动数组输出.条件判断. ...

  3. linux安装composer及安装yii2

    wget https://getcomposer.org/download/1.3.2/composer.phar mv composer.phar /usr/local/bin/composer c ...

  4. 数据仓库原理<3>:数据仓库与ODS

    1. 引言 本篇主要讲述操作数据存储(ODS)系统产生的背景.定义.特点,以及它与数据仓库的区别. 在前两篇,笔者介绍了什么是数据仓库?为什么需要数据仓库?数据仓库系统的体系结构是什么?因此可能在读者 ...

  5. 解决“ 故障模块名称: clr.dll ”

    错误内容: 微软的错误说明:http://support.microsoft.com/kb/2640103/zh-cn 类似下面的错误: 错误应用程序名称:xxx.exe,版本: 1.0.0.0,时间 ...

  6. 面试题之一(Spring和堆栈和逻辑运算符)

    1.&和&&区别? 都是逻辑运算符,都是判断两边同时为真,否则为假:但&&当第一个为假时,后面就不执行,而&则还是要继续执行,直至结束: ——————— ...

  7. python-kafka之理论篇

    kafka系列文章之python-api的使用. 在使用kafka-python时候需要注意,一定要版本兼容,否则在使用生产者会报 无法更新元数据的错误. 在本片测试中java版本为如下,kafka版 ...

  8. 移动互联网消息推送原理:长连接+心跳机制(MQTT协议)

    互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了 ...

  9. 数据库 - SQLite3 中的数据类型

    ------------------------------ 安装 Sqlite3 和 数据库查看工具: sudo apt-get install sqlite3 sudo apt-get insta ...

  10. Android项目开发二

    微博客户端开发 本周学习计划 学习布局控件和UI设计相关知识. 微博验证,学习OAuth相关知识. 看懂微博客户端开发部分代码. 把借鉴代码导入到Android Studio中并运行成功. 实际完成情 ...