递推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. kendo grid应用经验总结

    学习网址 https://docs.telerik.com/kendo-ui/controls/editors/dropdownlist/overview https://demos.telerik. ...

  2. GCC编译器ABI

    ABI与EABI 1)ABI(Application Binary Interface for the ARM Architecture),描述了应用程序与cpu内核的低级接口. ABI允许编译好的目 ...

  3. Object-C-NSArray

    NSArray *fruitArray=[[NSArray alloc] initWithObjects:@"apple",@"banana",@"p ...

  4. uva12083 二分图 求最大独立集 转化为求最大匹配 由题意推出二分图

    这题大白书例题 : Frank 是一个思想有些保守的高中老师,有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅途中萌生爱意.为了降低这种事情的发生概率,他决定确保带出去的任意两个学生至少要满足 ...

  5. 实现kylin定时跑当天的任务

    说明: 每天自动构建cube,动态在superset里面查看每天曲线变化图 #! /bin/bash ##cubeName cube的名称 ##endTime 执行build cube的结束时间 (命 ...

  6. xmind使用教程思维导图

    xmind使用教程思维导图 开始XMind旅程标记: 仅需2个快捷键 1 点击快捷键 创建同级主题 创建子主题 2 输入 选中主题后, 双击鼠标左键 或 单击空格键, 进入编辑状态. 3 其他内容 您 ...

  7. java多线程----JUC集合”01之 框架

    java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List(队列)和Set(集合). 1. List的实现类主要有: LinkedList, A ...

  8. 线程属性pthread_attr_t简介

    本文编辑整理自: http://hi.baidu.com/7828058/blog/item/256e16decd1a385e94ee3784.html http://www.ibm.com/deve ...

  9. div居中布局

    利用margin属性可以实现div居中布局,把div的左边距和右边距设置为auto即可,代码如下 <!DOCTYPE html> <html> <head> < ...

  10. VC++使用服务做守护进程的示例(转载)

    转载:http://blog.csdn.net/zdy0_2004/article/details/40461571 #define _WIN32_WINNT 0x502 #define _CRT_S ...