noip2002 普及组 过河卒
2018-01-14 12:31
176 查看
题目描述
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的。
现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
输入输出格式
输入格式:
一行四个数据,分别表示B点坐标和马的坐标。
输出格式:
一个数据,表示所有的路径条数。
输入输出样例
输入样例#1: 复制
6 6 3 3
输出样例#1: 复制
6
说明
结果可能很大!
动规转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1]
就是(i,j)可以由(i,j-1)与(i-1,j)而来,所以(i,j)的方案数等于(i,j-1)与(i-1,j)之和
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的。
现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
输入输出格式
输入格式:
一行四个数据,分别表示B点坐标和马的坐标。
输出格式:
一个数据,表示所有的路径条数。
输入输出样例
输入样例#1: 复制
6 6 3 3
输出样例#1: 复制
6
说明
结果可能很大!
动规转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1]
就是(i,j)可以由(i,j-1)与(i-1,j)而来,所以(i,j)的方案数等于(i,j-1)与(i-1,j)之和
#include<bits/stdc++.h> using namespace std; int n,m,hn,hm; long long dp[25][25]; bool b[25][25]; int main(){ scanf("%d%d%d%d",&n,&m,&hn,&hm); b[hn+2][hm+1]=b[hn+1][hm+2]=b[hn-1][hm-2]= b[hn-2][hm-1]=b[hn+1][hm-2]=b[hn+2][hm-1]= //马的坐标 b[hn-1][hm+2]=b[hn-2][hm+1]=b[hn][hm]=1; dp[0][0]=1; b[0][0]=1; for(register int i=0;i<=n;i++){ for(register int j=0;j<=m;j++){ if(!b[i][j]){ if(j==0) dp[i][j]=dp[i-1][j]; else if(i==0) dp[i][j]=dp[i][j-1]; //特判 else dp[i][j]=dp[i-1][j]+dp[i][j-1]; //动规方程 } } } printf("%lld\n",dp [m]); }
相关文章推荐
- NOIP 2002普及组 过河卒详解
- NOIP2002-普及组复赛-第二题-级数求和
- NOIP2002-普及组复赛-第三题-选数
- noip2002普及组-产生数
- NOIP2002普及组第一题【级数求和】题解 (普及山东tyd)
- luogu1002【2002普及】过河卒(递推)
- 过河卒(NOIP2002)
- luogu1035 级数求和(NOIP2002普及组第1题)
- 【9307】&【a303】过河卒(NOIP2002)
- CodeVS1009[NOIP2002(普及组)] 产生数【Floyd】
- [Wikioi 1009][NOIP 2002普及组]产生数
- [NOIP2002] 普及组
- 递推2--过河卒(Noip2002)
- NOIP 2002 普及组 数字游戏
- NOIP 2002 普及组 复赛 选数
- 马拦过河卒(NOIP2002)
- NOIP 2002 普及组 复赛 过河卒
- NOIP2002普及组
- NOIP2002-过河卒—经典的dp思想
- wikioi 1010 过河卒 (2002年NOIP全国联赛普及组)