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

P1002 [NOIP2002 普及组] 过河卒

时间:2024-04-03 22:22:42浏览次数:31  
标签:过河 NOIP2002 xm int ll P1002 ++ include dp

emmmm...据说是比较简单的dp?(再一次意识到自己的菜)
链接:https://www.luogu.com.cn/problem/P1002
题目:
总的思路就是一个状态转移方程吧:
dp[x][y] = dp[x-1][y] + dp[x][y-1];
然后如果发现这个点不能通过,那么强制修改dp[x][y] = 0;
代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>
typedef long long ll;
using namespace std;

const int N = 22;
int xb, yb, xm, ym;
bool jd[N][N];
ll dp[N][N];
int del[][2] = { {0,0},{2,1},{2,-1},{1,2},{1,-2},{-2,1},{-2,-1},{-1,2},{-1,-2} };
ll dfs(int x, int y)
{
	if (dp[x][y] != 0)return dp[x][y];
	if (x < 1 or y < 1)return 0;
	ll res;
	if (jd[x][y])res = 0;//这个配合jd一起用
	else res = dfs(x - 1, y) + dfs(x, y - 1);//核心在这里
	return dp[x][y] = res;

}
int main()
{
	cin >> xb >> yb >> xm >> ym;
	xb++, yb++, xm++, ym++;
    //init()部分修改jd,判断马能不能到
	for (int i = 0; i < 9; i++)
	{
		int dx = del[i][0] + xm, dy = del[i][1] + ym;
		if (dx >= 1 and dx <= xb and dy >= 1 and dy <= yb)
			jd[dx][dy] = true;
	}
	dp[1][1] = 1;
	cout << dfs(xb, yb);
	return 0;
}

标签:过河,NOIP2002,xm,int,ll,P1002,++,include,dp
From: https://www.cnblogs.com/zzzsacmblog/p/18113635

相关文章

  • 【洛谷P1036】 [NOIP2002 普及组] 选数
    一、题目:二、解题思路:本文章采用的解决方法是递归与DFS(深度优先搜索)。以下图是思路图:1.首先-确定位置题目说4个数字取三个数,所以考虑的只有三个位置和这三个位置分别放什么数值。从第一个位置开始放数。2.其次-开始放数分为4种可能,第一位置可以先放3,那么第二个位置......
  • 【华为OD机试真题】A卷-士兵过河(Python)
    一、题目描述【华为OD机试真题】A卷-士兵过河(Python)题目描述:一支N个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河。敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭。现在军队只找到了1只小船,这船最多能同时坐上2个士兵。1)当1个士兵划船过河,用时为a[i];0<=i<......
  • P1037 [NOIP2002 普及组] 产生数 python 题解
    原题链接:产生数原理解释本题就是基本的dfs,对每一个数遍历深搜,得到他能变化的所有情况,最后相乘就是结果,网上都是c的解法,需要用到高精度,但是python可以处理大数,不需要。vis[]判断该数是否变换过,防止重复以n=123,k=2,变换列表x=[1,3],y=[3,4],即1->3,3->4:先遍历1:遍历......
  • 每日一题 第三十五期 洛谷 过河卒
    [NOIP2002普及组]过河卒题目描述棋盘上AAA点有一个过河卒,需要走到目标BB......
  • P1036 [NOIP2002 普及组] 选数
    思路:也算典型的dfs,题目就是要求从n个数中选择k个数,计算这k个数的和,看这个和是否是素数。我们知道在dfs时相当于是进行全排列,而结果要求的是组合后和的情况。根据排列和组合的关系,他们之间差K!倍,所以需要在dfs求得个数cnt后除以k!。题目:AC代码:#include<algorithm>#include<io......
  • 青蛙过河(前缀+二分)
    1importjava.util.*;23publicclassMain{4publicstaticvoidmain(String[]args){5Scannerscanner=newScanner(System.in);6intn=scanner.nextInt();7longx=scanner.nextLong();8//前缀和9lo......
  • P1002 [NOIP2002 普及组] 过河卒(动态规划)
    #include<bits/stdc++.h>usingnamespacestd;longlongdp[30][30];boolm[30][30];intmain(){ intAx,Ay,Mx,My; cin>>Ax>>Ay>>Mx>>My; Ax+=2;Ay+=2;Mx+=2;My+=2; dp[2][1]=1; m[Mx][My]=1; m[Mx-2][My-1]......
  • 操作系统综合题之“用记录型信号量机制的wait和signal操作来解决了由北向南和由南向北
    1.问题:假设系统有三个并发进程read、move和print共享缓冲区B1和B2。进程read负责从输入设备上读取信息,每读取一条记录后把它存如缓冲区B1中;进程move负责从缓冲区B1中取出一条记录,整理后放入缓冲区B2;进程print负责将缓冲区B2中的记录取出并打印输出。缓冲区B1和B2每次只能存放1个......
  • 操作系统综合题之“用记录型信号量机制的wait和signal操作来解决了由北向南和由南向北
    1.问题:一条哦东西走向河流上,有一根南北走向的独木桥,要想过河只能通过这根独木桥。只要人们朝着相同的方向过独木桥,同一时刻允许有多个人可以通过。如果在相反的方向上同时有两个人过独木桥则会发生死锁。如果一个人想过河,他必须看当前独木桥的通信情况,若当前的通行方向与他的过河......
  • 洛谷题单指南-搜索-P1032 [NOIP2002 提高组] 字串变换
    原题链接:https://www.luogu.com.cn/problem/P1032题意解读:要计算子串变换的最少步数,典型的最短路问题,可以通过BFS求解。解题思路:思路上比较直观,从给定的字符串开始,找有多少种替换可能,依次进行替换,存入队列,继续BFS,过程中记录替换的次数但是,有一些细节还需要注意:1、有多种替换......