递推2--过河卒(Noip2002)
递推2--过河卒(Noip2002)
一、心得
写出递推公式就OK了,具体编程还是很简单的
二、题目及分析

三、代码及结果
这里取起点: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)的更多相关文章
- 过河卒(Noip2002)(dp)
过河卒(Noip2002) 时间限制: 1 Sec 内存限制: 128 MB提交: 7 解决: 6[提交][状态][讨论版][命题人:quanxing] 题目描述 棋盘上A点有一个过河卒,需要走到 ...
- 【openjudge】【递推】例3.6 过河卒(Noip2002)
[题目描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1 ...
- 过河卒(NOIP2002)
题目链接:过河卒 直接模拟?会T掉60分. 所以我们可以采用递推,怎么想到的? 因为卒子只能向下或向右走,所以走到一个点的方法数,等于走到它上面点的方法数加上走到它左边点的方法数,这样就可以地推了. ...
- 【9307】&【a303】过河卒(NOIP2002)
Time Limit: 10 second Memory Limit: 2 MB 问题描述 如图,A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右. 同时在棋盘上的任一点有一个对方 ...
- P1002 过河卒 【递推、简单动规】
题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒 ...
- LFYZ-OJ ID: 1020 过河卒(NOIP2002)
过河卒 Proble Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃 ...
- NOIP2002 过河卒(DFS,DP)
https://www.luogu.org/problem/P1002 题目描述 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如 ...
- noip2002 普及组 过河卒
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过 ...
- AC日记——过河卒 洛谷 1002
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
随机推荐
- kendo grid应用经验总结
学习网址 https://docs.telerik.com/kendo-ui/controls/editors/dropdownlist/overview https://demos.telerik. ...
- GCC编译器ABI
ABI与EABI 1)ABI(Application Binary Interface for the ARM Architecture),描述了应用程序与cpu内核的低级接口. ABI允许编译好的目 ...
- Object-C-NSArray
NSArray *fruitArray=[[NSArray alloc] initWithObjects:@"apple",@"banana",@"p ...
- uva12083 二分图 求最大独立集 转化为求最大匹配 由题意推出二分图
这题大白书例题 : Frank 是一个思想有些保守的高中老师,有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅途中萌生爱意.为了降低这种事情的发生概率,他决定确保带出去的任意两个学生至少要满足 ...
- 实现kylin定时跑当天的任务
说明: 每天自动构建cube,动态在superset里面查看每天曲线变化图 #! /bin/bash ##cubeName cube的名称 ##endTime 执行build cube的结束时间 (命 ...
- xmind使用教程思维导图
xmind使用教程思维导图 开始XMind旅程标记: 仅需2个快捷键 1 点击快捷键 创建同级主题 创建子主题 2 输入 选中主题后, 双击鼠标左键 或 单击空格键, 进入编辑状态. 3 其他内容 您 ...
- java多线程----JUC集合”01之 框架
java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List(队列)和Set(集合). 1. List的实现类主要有: LinkedList, A ...
- 线程属性pthread_attr_t简介
本文编辑整理自: http://hi.baidu.com/7828058/blog/item/256e16decd1a385e94ee3784.html http://www.ibm.com/deve ...
- div居中布局
利用margin属性可以实现div居中布局,把div的左边距和右边距设置为auto即可,代码如下 <!DOCTYPE html> <html> <head> < ...
- VC++使用服务做守护进程的示例(转载)
转载:http://blog.csdn.net/zdy0_2004/article/details/40461571 #define _WIN32_WINNT 0x502 #define _CRT_S ...