首页 > 其他分享 >2、快速传球

2、快速传球

时间:2023-09-20 22:23:25浏览次数:42  
标签:传球 obstacleGrid int rhs 路线 快速 dp

班级组织传球活动,男女同学随机排成m行n列队伍,第一列中的任意个男同学都可以作为传球的起点,要求最终将球传到最后一列的任意-个男同学手里,求所有能够完成任务的传球路线中的最优路线(传球次数最少的路线)的传球次数。
传球规则:
1.男同学只能将球传给男同学,不能传给女同学
2.球只能传给身边前后左右相邻的同学。
3.如果游戏不能完成,返回-1。
说明:
1.传球次数最少的路线为最优路线
2.最优路线可能不唯一,不同最优路线都为最少传球次数

> 代码


class Solution {
public:
    int lowpath(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        vector<int> dp(m, -1);
        //初始化
        for (int i = 0; i < m; i++) {
            if (obstacleGrid[i][0] == 1) {
                dp[i] = 0;
            }
        }
        //迭代
        for (int i = 1; i < n; i++) {
            //左右迭代
            for (int j = 0; j < m; j++) {
                if (obstacleGrid[j][i] == 1 && dp[j] != -1) {
                    dp[j] += 1;
                }
            }
            //上下迭代
            for (int j = 0; j < m; j++) {
                int lhs, rhs;
                if (obstacleGrid[j][i] == 0) {
                    dp[j] = -1;
                    continue;
                }
                if (j - 1 < 0 || dp[j - 1] < 0) {
                    lhs = INT_MAX;
                }
                else {
                    lhs = dp[j - 1] + 1;
                }
                if (j + 1 > 0 || dp[j + 1] < 0) {
                    rhs = INT_MAX;
                }
                else {
                    rhs = dp[j + 1] + 1;
                }
                int k = min(lhs, rhs);
                if (dp[j] == -1) {
                    dp[j] = (k == INT_MAX) ? -1 : k;
                }
                else {
                    dp[j] = min(dp[j], k);
                }
            }
        }
        return dp[m - 1];
    }
};

标签:传球,obstacleGrid,int,rhs,路线,快速,dp
From: https://www.cnblogs.com/lihaoxiang/p/17718601.html

相关文章

  • 使用js开发一个快速打开前端项目的alfred插件
    使用js开发一个快速打开前端项目的插件目录前言使用的技术栈步骤问题发现待优化前言一直以来开发都是先打开vscode,然后选择项目,在项目多的情况下会觉得挺繁琐;如果同时打开了许多vscode窗口,寻找目标窗口也比较麻烦,于是萌生了开发一个alfred的工作流插件的想法,目标是在alf......
  • Elasticsearch7.x - 快速入门
    目录Elasticsearch是什么?Elasticsearch环境搭建ES相关操作(HTTP)索引操作1)创建索引2)查看所有索引3)查询单个索引4)删除索引文档操作1)创建文档2)查看文档3)修改文档4)修改字段5)删除文档6)条件删除映射操作映射数据说明索引映射关联高级查询1)查询所有文档2)匹配查询3)字段匹配查询4)关键......
  • NTT(快速数论变换)学习
    回顾:FFTFFT(快速傅立叶变换)学习-Isakovsky-博客园(cnblogs.com)目的:将多项式的系数表示法形式转换为点值表示法形式,或者说,快速计算出多项式在若干个点上的值.中心思想:适当地选取自变量,使得自变量两两互为相反数,求出的多项式值可重复利用,减少运算次数例如上面那篇......
  • 每日学习之phoenix快速入门
    1.建表语句createtableifnotexists表名(ROWKEY名称数据类型primarykey,列簇名.列名1数据类型NOTNULL,列簇名.列名2数据类型NOTNULL,列簇名.列名3数据类型,列簇名.列名4数据类型);2.删除表droptableifexists表名;3.插入数据up......
  • 快速排序算法
    快速排序1.快速排序的思想快速排序是一种分治的排序算法,是对于冒泡排序的改进算法,在C语言标准库中的函数qsort()的实现就是快速排序。(下述快速排序都是最后要求值按从小到大排序)快速排序的核心思想在于:每次都选择主元,然后利用主元进行划分,使得左边的元素都小于主元,右边的元素......
  • 如何将手机上微信的文件快速传递到linux平台?
    要将手机上微信的文件快速传递到Linux平台,你可以尝试以下几种方法:1.通过USB传输:连接手机和Linux计算机,将手机设置为传输文件模式,然后在Linux上使用文件管理器访问手机的存储,从中复制所需的文件到Linux平台。2.使用第三方应用:在手机上安装支持文件传输的第三方应用,如AirDroid、Pus......
  • 【原创】2-快速记忆秘籍-记忆的另一种分类及规律
    大家好,我又来给大家讲课了,从今天起我会不定期给大家由浅入深讲解下记忆的修炼过程,让大家对自己“肩膀上的圆球”有一个本质的认识。在学习完全部的过程后,你也会发现,原来自己的记忆怎么这么好,是的,其实每个人天生都是最强大脑!l  记忆的另一种分类结合上篇文章,实际上已经把记忆......
  • 【原创】4-快速记忆秘籍-记忆内容的分类
    大家好,我又来给大家讲课了,从今天起我会不定期给大家由浅入深讲解下记忆的修炼过程,让大家对自己“肩膀上的圆球”有一个本质的认识。在学习完全部的过程后,你也会发现,原来自己的记忆怎么这么好,是的,其实每个人天生都是最强大脑!记忆,记忆,到底我们需要记忆什么东西?结合我们的日常经念,......
  • Python多领域场景实战课 快速成为多面手[完结22章]
    点击下载——Python多领域场景实战课快速成为多面手[完结22章] 提取码:xi9j [完结22章]Python多领域场景实战课快速成为多面手,Python在各个编程语言中比较适合新手学习,Python解释器易于扩展,可以使用C、C++或其他可以通过C调用的语言扩展新的功能和数据类型。Python也可用于可定......
  • 教你用API插件开发一个AI快速处理图片小助手
    本文分享自华为云社区《【案例教学】华为云API图引擎服务GES的便捷性—AI帮助快速处理图片小助手》,作者:华为云PaaS服务小智。调用云服务、API、SDK、调试、查看……“我”都行,一起来体验用HuaweiCloudAPI实现AI快速处理图片。1IntelliJIDEA之API插件介绍API插件支持 VSCod......