算法基础之滑雪

news/2024/7/15 18:40:20 标签: 算法, 数据结构, c++, 开发语言, 图论

滑雪

  • 核心思想:记忆化搜索

    • 状态表示: f[i][j] 表示所有从(i,j) 开始滑的路径的最大值

    • 状态计算: 分成四个方向 f[i][j] = max(f[i][j] , f[i][j+1] + 1)

      • 且h[a][b] (下一个点) 必须严格小于 h[i][j] 才能滑过去
    • 在这里插入图片描述

    •   #include<iostream>
        #include<cstring>
        #include<algorithm>
        
        using namespace std;
        const int N = 310;
        
        int f[N][N];
        int h[N][N];
        int n,m;
        int dx[4] = {1,0,-1,0} , dy[4] = {0,1,0,-1};  //四个方向
        
        int dp(int x,int y)
        {
            //记忆化搜索的核心 之前操作求得的f为最大距离 全部保留 下一次直接用即可
            if(f[x][y] != -1) return f[x][y];  //初始化为-1 若滑过 则返回
            
            f[x][y] = 1;  //该点没滑过 初始化为1 只走过这一个点
            for(int i=0;i<4;i++)
            {
                int a = x + dx[i] , b = y + dy[i];
                if(a >=1 && a<=n && b >= 1 && b <= m && h[a][b] < h[x][y])
                    f[x][y] = max(f[x][y] , dp(a,b) + 1);  //递归遍历
            }
            
            return f[x][y];
        }
        
        int main()
        {
            cin>>n>>m;
            
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    cin>>h[i][j];
                    
            memset(f,-1,sizeof f);  //顺便标记是否滑过
            
            int res = 0;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    res = max(res , dp(i,j));  //因为dp函数要有返回值
                    
            cout<<res;
        }
      

http://www.niftyadmin.cn/n/5297264.html

相关文章

目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值一致程度&#xff0c;损失函数越小&#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段&#xff0c;如果我们想让预测值无限接近于真实值&#xff0c;就需要将损失值降到最低…

cfa一级考生复习经验分享系列(十五)

备考背景&#xff1a; 本科211石油理科背景&#xff1b;无金融方面专业知识及工作经验&#xff1b;在职期间备考&#xff1b;有效备考时间2个月&#xff1b;12月一级考试10A。 复习进度及教材选择 首先说明&#xff0c;关于教材的经验分享针对非金融背景考生。 第一阶段&#x…

Linux:apache优化(1)—— 长链接/保持连接

系统:CentOS 7.9 apache版本为&#xff1a;2.4.25 需要使用源码包进行安装才能够使用这些扩展模块 在使用这些扩展模块前要先下载zlib-devel 安装--enable-deflate选项需要的网页压缩传输的软件包 yum -y install zlib-devel 在配置编译安装时需要使用扩展配置 ./config…

MIT线性代数笔记-第34讲-左右逆,伪逆

目录 34.左右逆&#xff0c;伪逆左右逆伪逆 打赏 34.左右逆&#xff0c;伪逆 左右逆 之前讲到的逆都是针对可逆方阵而言的&#xff0c;对于长方矩阵&#xff0c;实际上也有广义的逆&#xff0c;那就是左逆和右逆 左逆 当矩阵列满秩&#xff0c;即 r n r n rn时&#xff0c;…

HTML5+CSS3③——无语义布局标签、画盒子、CSS定义、CSS引入方式

目录 无语义布局标签 画盒子 CSS定义 小结 CSS引入方式 小结 无语义布局标签 画盒子 CSS定义 小结 CSS引入方式 小结

Docker 容器命令总汇

目录 1、创建Docker容器&#xff08;不启动&#xff09; 2、创建Docker容器&#xff08;启动&#xff09; 3、列出正在运行的容器 4、停止和启动容器 5、重启容器 6、进入容器 7、查看容器信息 8、查看容器日志 9、删除容器和镜像 10、重命名容器 11、从旧容器复制数…

【Redis-02】Redis数据结构与对象原理 -上篇

Redis本质上是一个数据结构服务器&#xff0c;使用C语言编写&#xff0c;是基于内存的一种数据结构存储系统&#xff0c;它可以用作数据库、缓存或者消息中间件。 我们经常使用的redis的数据结构有5种&#xff0c;分别是&#xff1a;string(字符串)、list(列表)、hash(哈希)、s…

网络故障排查和流量分析利器-Tcpdump命令

Tcpdump是一个在Unix/Linux系统上广泛使用的命令行网络抓包工具。它能够捕获经过网络接口的数据包&#xff0c;并将其以可读的格式输出到终端或文件中。Tcpdump是一个强大的命令行工具&#xff0c;能够捕获和分析网络数据包&#xff0c;为网络管理员和安全专业人员提供了深入了…