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

P1002 [NOIP2002 普及组] 过河卒

时间:2022-10-16 20:35:39浏览次数:68  
标签:过河 NOIP2002 int P1002 40 const include my mx

P1002 [NOIP2002 普及组] 过河卒

题目见上。

一个经典的递推题

递推不会的看下面:

https://www.cnblogs.com/haoningdeboke-2022/p/16247055.html

俗话输得好 马走日

所以先写出马可以走到的地方

 
1 const int fx[] = {0, -2, -1, 1, 2, 2, 1, -1, -2};
2 const int fy[] = {0, 1, 2, 2, 1, -1, -2, -2, -1};

然后标记马走过的地方:

     1 for(int i = 1; i <= 8; i++) s[mx + fx[i]][my + fy[i]] = 1; 
 
但要防止越界,所以坐标+2以防越界:
 1 bx += 2; by += 2; mx += 2; my += 2; 
最关键的代码:
for(int i = 2; i <= bx; i++){
        for(int j = 2; j <= by; j++){
            if(s[i][j]) continue; // 如果被马拦住就直接跳过
            f[i][j] = f[i - 1][j] + f[i][j - 1];
            //递推 因为可以从左边的点和上边的点走过来所以 左边的点+上边的点  

}
}

 

 

完整代码:
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #define ll long long
 6 using namespace std;
 7 
 8 const int fx[] = {0, -2, -1, 1, 2, 2, 1, -1, -2};
 9 const int fy[] = {0, 1, 2, 2, 1, -1, -2, -2, -1};
10 //马可以走到的位置
11 
12 int bx, by, mx, my;
13 ll f[40][40];
14 bool s[40][40]; //判断这个点有没有马拦住
15 int main(){
16     scanf("%d%d%d%d", &bx, &by, &mx, &my);
17     bx += 2; by += 2; mx += 2; my += 2;
18     //坐标+2以防越界
19     f[2][1] = 1;//初始化
20     s[mx][my] = 1;//标记马的位置
21     for(int i = 1; i <= 8; i++) s[mx + fx[i]][my + fy[i]] = 1;
22     for(int i = 2; i <= bx; i++){
23         for(int j = 2; j <= by; j++){
24             if(s[i][j]) continue; // 如果被马拦住就直接跳过
25             f[i][j] = f[i - 1][j] + f[i][j - 1];
26             //状态转移方程
27         }
28     }
29     printf("%lld\n", f[bx][by]);
30     return 0;
31 } 

 












 

标签:过河,NOIP2002,int,P1002,40,const,include,my,mx
From: https://www.cnblogs.com/haoningdeboke-2022/p/16796975.html

相关文章

  • P1002 [NOIP2002 普及组] 过河卒
    P1002 标记马可以到达的地方,因为卒是能向下或向右走,设f[i][j]表示到达(i,j)的路径数,显然有:f[i][j]=f[i-1][j]+f[i][j-1]。DP转移即可。1#include<bits/std......
  • 农夫过河图形界面版
    游戏内容:设定兔子、羊、胡萝卜、卷心菜、狼、农夫等角色,设定一次只能带一个角色过河与一次可以带两个角色过河两种模式,玩家通过点击角色按钮来决定角色是否可以过河,在每一......
  • luogu P1052 [NOIP2005 提高组] 过河
    [NOIP2005提高组]过河题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳......
  • [NOIP2002 提高组] 字串变换
    [NOIP2002提高组]字串变换题目背景本题疑似错题,不保证存在靠谱的多项式复杂度的做法。测试数据非常的水,各种做法都可以通过,不代表算法正确。因此本题题目和数据仅供参......
  • 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002)
    时间限制:1000ms      内存限制:65536KB提交数:26367   通过数:11410【题目描述】棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下......
  • 洛谷 P1036 [NOIP2002 普及组] 选数(dfs)
    https://www.luogu.com.cn/problem/P1036题目大意:从给定的n个数中选出m个求和,结果是一个素数的情况有多少种?输入43371219输出1这个题目的代码是根据Acwing中......
  • P1002 [NOIP2002 普及组] 过河卒 题解
    题目:[NOIP2002普及组]过河卒题目描述棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点。卒行走的规则:可以向下、或者向右。同时在棋盘上\(C\)点有一个对方的马,该......
  • [NOIP2002 普及组] 选数
    题目链接:https://www.luogu.com.cn/problem/P1036试题分析:题目要求从n个数中任选k个数相加,求有多少种和为素数的情况。这道题我们运用的主要是深搜,其次还要写一个判断素数......
  • 洛谷P1037 [NOIP2002 普及组] 产生数
    排列组合QWQ当我第一眼看见这到题,K才15???,于是默默的打出了暴搜。以我这么高(la)超(ji)的水平,当然是TLE.....对着屏幕一呆,70行代码。。。。步入正题:再打深搜,那是不可......
  • [NOIP2002 提高组] 均分纸牌
    题目链接:https://www.luogu.com.cn/problem/P1031试题分析:首先分析样例:输入样例后,我们要先求出平均值,进而求出与平均值的差值: 我们能够得到三次移动:1.  7向右-4变......