首页 > 其他分享 >P1002 [NOIP2002 普及组] 过河卒

P1002 [NOIP2002 普及组] 过河卒

时间:2023-11-24 20:45:07浏览次数:42  
标签:le 过河 NOIP2002 int 30 P1002 坐标

[NOIP2002 普及组] 过河卒

题目描述

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

棋盘用坐标表示,\(A\) 点 \((0, 0)\)、\(B\) 点 \((n, m)\),同样马的位置坐标是需要给出的。

现在要求你计算出卒从 \(A\) 点能够到达 \(B\) 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入格式

一行四个正整数,分别表示 \(B\) 点坐标和马的坐标。

输出格式

一个整数,表示所有的路径条数。

样例 #1

样例输入 #1

6 6 3 3

样例输出 #1

6

提示

对于 \(100 \%\) 的数据,\(1 \le n, m \le 20\),\(0 \le\) 马的坐标 \(\le 20\)。

#define int long long
using namespace std;
int dx[] = {0, -2, -1, 1, 2, 2, 1, -1, -2}; //马的移动方向
int dy[] = {0, 1, 2, 2, 1, -1, -2, -2, -1};
int vis[30][30];
int dp[30][30];
signed main(){
	int ex,ey,bx,by;
	cin>>ex>>ey>>bx>>by;
	ex+=1;
	ey+=1;
	bx+=1;
	by+=1;
	for(int i=0;i<9;i++){
		int x=dx[i]+bx;
		int y=dy[i]+by;
		vis[x][y]=1;
	}  //记录不能走的
	dp[1][0]=1;
	for(int i=1;i<=ex;i++){
		for(int j=1;j<=ey;j++){
			if(vis[i][j])continue;
			dp[i][j]=dp[i-1][j]+dp[i][j-1];
		}
	}   //推出状态转移方程然后开始递推
	cout<<dp[ex][ey];
	return 0;
} 

标签:le,过河,NOIP2002,int,30,P1002,坐标
From: https://www.cnblogs.com/yufan1102/p/17854730.html

相关文章

  • [Deeplearning] 过河问题
    先模拟一下样例125101和2去,耗时21回,耗时35和10去,耗时132回,耗时151和2去,耗时17现在我们把题目化为两种策略策略1:共2人,一起过河,用时较小的将手电筒放回策略2:共4人,耗时较小的两人先过,接着将手电筒送回,用时较大的两人过,最后右侧用时最小的人将手电筒送回,左侧两人一起过......
  • DOJ-team-match 7-过河问题
    DOJ-team-match7-过河问题先模拟一下样例125101和2去,耗时21回,耗时35和10去,耗时132回,耗时151和2去,耗时17现在我们把题目化为两种策略策略1:共2人,一起过河,用时较小的将手电筒放回策略2:共4人,耗时较小的两人先过,接着将手电筒送回,用时较大的两人过,最后右侧用时最小的人......
  • 【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
    [NOIP2002普及组]级数求和题目描述已知:。显然对于任意一个整数,当足够大的时候,。现给出一个整数,要求计算出一个最小的,使得。输入格式一个正整数。输出格式一个正整数。样例#1样例输入#11样例输出#12提示【数据范围】对于的数据,。【题目来源】NOIP2002普及组第一题......
  • P1037 [NOIP2002 普及组] 产生数
    P1037[NOIP2002普及组]产生数解法1:利用floyd寻找每位数字可变化的点点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;strings;intd[20][20];intf[25];intnum[150];intmain(){ cin>>s; intn=s.length(); intq; ci......
  • 商人过河问题数学建模
     问题描述三名商人各带–个随从乘船渡河,一只小船只能容纳二人,由他们自己划行.随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,商人们怎样才能安全渡河呢? 问题建模考虑用深度优先搜索解决此问题,提前记录在船承载量为2时候,所有可行的移动状态,以及所有安全的商......
  • P1002 [NOIP2002 普及组] 过河卒
    P1002[NOIP2002普及组]过河卒基础DP卒只能向右/向下由此可得转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1]卒不能走马能到的地方和马所在的地方则用一个数组标记马能到的地方和马所在的地方,在经过该点的时候跳过即可注意判断边界问题以及dp数组的初始化#include<bit......
  • 【题解】洛谷 P1002 [NOIP2002 普及组] 过河卒
    原题链接解题思路这是一道经典的动态规划题目。如果尝试使用深度优先搜索(dfs)或广度优先搜索(bfs)做就会获得TLE(注意数据范围)。于是我们想到了更为高级的动态规划(DynamicProgramming,dp)。简略介绍动态规划算法的核心思想:把原问题分解为相对简单的子问题的方式求解复杂问题。......
  • P9169-过河卒
    原题链接过河卒题目大意一个\(n\timesn\)的棋盘,上有一黑二红三子,黑棋每次可以从\((x,y)\)移动到\((x-1,y),(x,y-1),(x,y+1)\),红棋每次可以从\((x,y)\)移动到\((x-1,y),(x+1,y),(x,y-1),(x,y+1)\),求双方都使用最优策略的情况下谁最少要几步获胜。某一方获胜当且仅当:......
  • 「NOIP2002」均分纸牌
    ​题目描述有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆......
  • 士兵过河
    题目描述一支个士兵的军队正在趁夜色逃亡途中遇到一条湍急的大河敌军在的时长后到达河面,没到过对岸的士兵都会被消灭。现在军队只找到了只小船,这船最多能同时坐上个士兵。当个土兵划船过河,用时为当个士兵坐船同时划船过河时,用时为两土兵中用时最长的.当个士兵坐船个士兵划船时,用......