算法实验二 矩阵最小路径和 LIS

news2024/11/27 0:43:58

算法实验课二

矩阵最小路径和

leetcode裸题

最小路径和

给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例 1:

img

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。

示例 2:

输入:grid = [[1,2,3],[4,5,6]]
输出:12

提示:

  • m == grid.length

  • n == grid[i].length

  • 1 <= m, n <= 200

  • 0 <= grid[i][j] <= 200

class Solution {
public:
    //dp[i][j]代表该位置上的最小和
    //dp[i][j] = dp[i-1][j]) if(grid[i-1][j] > )
    int minPathSum(vector<vector<int>>& grid) {
        int m = grid.size();//行数
        int n = grid[0].size();//列数
​
        vector<vector<int>> dp = grid;
        for(int i = 1; i < m; i ++)
            dp[i][0] = dp[i][0] + dp[i - 1][0];
        
        for(int j = 1; j < n; j ++)
            dp[0][j] = dp[0][j] + dp[0][j - 1];
        
        for(int i = 1; i < m; i ++)
        {
            for(int j = 1; j < n; j ++)
            {
                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + dp[i][j];
                // dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
            }
        }
​
        return dp[m - 1][n - 1];
    }
};

完整实现

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
typedef long long LL;
LL dp[N][N];
LL grid[N][N];
int n, m;
​
int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
        {
            cin >> grid[i][j];
            dp[i][j] = grid[i][j];//初始化
        }
    for(int i = 1; i <= n; i ++)
        dp[i][1] = dp[i][1] + dp[i - 1][0];
    
    for(int j = 1; j <= m; j ++)
        dp[1][j] = dp[1][j] + dp[1][j - 1];
         
    for(int i = 1; i <= n; i ++)
    {
        for(int j = 1; j <= m; j ++)
        {
            dp[i][j] += min(dp[i - 1][j], dp[i][j - 1]);
        }
    }
    
    cout << dp[n][m] << endl;
    
    return 0;
}

LIS最长上升子序列

image-20240402221428416

image-20240402221459580

题目练习

1.蓝桥勇士

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int dp[N];//表示以a[i]结尾的最长上升子序列的长度
int a[N];
int n;
​
int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n;
    for(int i = 1; i <= n; i ++)
    {
        cin >> a[i];
        dp[i] = 1;//初始化
    }
    
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j < i; j ++)
            if(a[j] < a[i])
                dp[i] = max(dp[i], dp[j] + 1);//状态转移方程
​
    int res = -0x3f3f3f3f;//答案初始为一个最小值
    for(int i = 1; i <= n; i ++)//判断以哪个a[i]结尾是最长的上升子序列
        res = max(res, dp[i]);
    
    cout << res << endl;
    return 0;
}

判断以哪个a[i]结尾是最长的上升子序列可以偷懒使用库函数

// int res = -0x3f3f3f3f;//答案初始为一个最小值 // for(int i = 1; i <= n; i ++)//判断以哪个a[i]结尾是最长的上升子序列 // res = max(res, dp[i]);

cout << *max_element(dp + 1, dp + 1 + n) << endl;

以上最长上升子序列(LIS)算法时间复杂度O(n^2)

还有一种实现方式,可以利用二分实现O(nlogn)的时间复杂度

题目二

1.合唱队形

image-20240402221625696

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int a[N], dp1[N], dp2[N], n;
​
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++)
    {
        cin >> a[i];
        dp1[i] = 1;
        dp2[i] = 1;
    }
​
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j < i; j ++)
            if(a[j] < a[i])
                dp1[i] = max(dp1[i], dp1[j] + 1);
    
    for(int i = n; i ; i --)
        for(int j = n; j > i; j --)
            if(a[j] < a[i])
                dp2[i] = max(dp2[i], dp2[j] + 1);
    
    int res = -0x3f3f3f3f;
    for(int i = 1; i <= n; i ++)
        res = max(res, dp1[i] + dp2[i] - 1);
    
    cout << n - res << endl;
    return 0;
}

leetcode裸题

300. 最长递增子序列 - 力扣(LeetCode)

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int dp[2550];
        if(nums.size() == 0)
            return 0;
        for(int i = 0; i < nums.size(); i ++)
        {
            dp[i] = 1;//初始化
            for(int j = 0; j < i; j ++)
                if(nums[j] < nums[i])
                    dp[i] = max(dp[i], dp[j] + 1);
        }
​
        return *max_element(dp, dp + nums.size());
​
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1577481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel 文件底部sheet 如何恢复

偶然打开一个excel文件&#xff0c;惊奇地发现&#xff1a;原来excel文件底部的若干个sheet居然全都看不到了。好神奇啊。 用其它的电脑打开同样的excel文件&#xff0c;发现&#xff1a;其实能看到的。说明这个excel文件并没有被损坏。只要将修改相关设置。就可以再次看…

Mysql底层原理四:B+树索引

B树索引&#xff08;索引的原理&#xff09; 1.前言 前边我们详细唠叨了InnoDB数据⻚的7个组成部分&#xff0c;知道了各个数据⻚可以组成⼀个双向链表&#xff0c;⽽每个数据⻚中的记录会按照主键值从⼩到⼤的顺序组成⼀个单向链 表&#xff0c;每个数据⻚都会为存储在它⾥边…

SpringCloud Alibaba @SentinelResource 注解

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十五篇&#xff0c;即介绍 SpringCloud Alibaba 的 SentinelResource 注解。 二、简介 这个注解用于标…

Agenda家族再升级,跨平台定制化勒索引关注

Agenda勒索也被称为Qilin勒索&#xff0c;该家族的早期版本使用Go 语言编写的&#xff0c;增加了安全分析的难度。其早期版本是针对每位受害者定制的&#xff0c;使用受害者的机密信息&#xff08;例如泄露的帐户和唯一的公司 ID&#xff09;作为附加文件扩展名。针对早期版本A…

TS封装axios并约束请求参数以及响应的类型

封装一个简单的axios src/utils/axiosInstance.ts&#xff1a;其中定义了基本返回数据的类型 import axios, {AxiosInstance,AxiosResponse,AxiosError,AxiosRequestConfig, } from "axios"// 定义基本返回数据类型 export interface ApiResponse<T> {code: …

蓝桥杯-DS18B20温度传感器

一.管脚&芯片&寄存器 1.芯片 2.了解封装以及引脚的用法 3.相关寄存器 报警功能 二&#xff0c;如何使能DS18B20芯片 1.初始化芯片&比赛提供的驱动代码 比赛提供的底层驱动代码 /* # 单总线代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考…

基于R语言lavaan结构方程模型(SEM)实践技术应用

原文链接&#xff1a;基于R语言lavaan结构方程模型&#xff08;SEM&#xff09;实践技术应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596681&idx4&sn08753dd4d3e7bc492d750c0f06bba1b2&chksmfa823b6ecdf5b278ca0b94213391b5a222d1776743609cd…

跨服务器迁移nextcloud数据

背景 阿里云最近做活动,99一年的2U2G的服务器,比我原来的1U1G的服务器不知道高到哪里去了,于是决定迁移服务器数据到另一台主机上。原先的计划是直接做一个自定义镜像,然后复制到另一台主机就行,结果发现旧主机是aliyunOS,新主机不想踩这个坑了,决定换成乌班图,因此决定重新搭…

Mac系统Unity团结引擎打包OpenHomeny项目配置

1、团结引擎下载&#xff1a;直接百度下载即可 2、mac版本的DevEco4.0编辑器下载&#xff1a; widthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v4.0/zh-cn/release-notes/OpenHarmony-v4.0-release.md/#%E9%85%8D%E5%A5%97%E5%85%B3%E7%B3%BB3、打开D…

什么是多路复用器滤波器

本章将更深入地介绍多路复用器滤波器&#xff0c;以及它们如何用于各种应用中。您将了解到多路复用器如何帮助设计人员创造出更复杂的无线产品。 了解多路复用器 多路复用器是一组射频(RF)滤波器&#xff0c;它们组合在一起&#xff0c;但不会彼此加载&#xff0c;可以在输出之…

智能化办公时代来临:AI助你解放双手

文章目录 一、AI在办公领域的广泛应用二、AI助力办公效率提升1.自动化流程减少繁琐任务2.智能分析辅助决策制定3.个性化服务提升用户体验 三、AI提升办公效率的未来趋势1.更加智能化的办公场景2.更高效的团队协作3.更全面的数据安全保护 四、应对AI带来的挑战《AI高效工作一本通…

RocketMQ笔记(七)SpringBoot整合RocketMQ发送事务消息

目录 一、简介1.1、流程图1.2、事务消息流程介绍 二、Maven依赖三、生产者3.1、application配置3.2、员工表3.3、实体3.4、持久层3.5、监听器 四、测试4.1、普通消息4.2、事务消息4.2.1、消费者4.2.2、正常提交4.2.3、异常提交 五、其他5.1、接口说明5.2、checkLocalTransactio…

「Qt Widget中文示例指南」如何实现一个分组框

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 Group Box&#xff…

python中for与while的区别是什么

Python中for循环和while循环本质上是没有区别的&#xff0c;但是在实际应用上&#xff0c;针对性不太一样。 for主要应用在遍历中&#xff0c;比如&#xff1a; example1&#xff1a; for i in range(10):print(i) 打印结果为&#xff1a; 0 1 2 3 4 5 6 7 8 9 注&#xff1a;…

springboot系列-api接口请求实现

springboot HTTP请求接口实现 基于springboot 2.6.6 代码地址&#xff1a;github仓库地址 更多系列教程请关注公众号’coderlike’ 如果觉得有帮助希望能关注下公众号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…

IP网络对讲广播系统审计

前言 这个系统是前两年在一个内网遇到的&#xff0c;当时顺手试了一个admin登陆之后再没有然后了&#xff0c;最近发现有大佬分享关于这个系统的漏洞&#xff0c;于是就把自己当初看的几个漏洞分享一下&#xff0c;系统比较简单&#xff0c;漏洞点很多&#xff0c;不要做坏事哦…

PaddleVideo:PP-TSM 视频分类

本文记录&#xff1a;使用Paddle框架训练TSM&#xff08;Temporal Shift Module&#xff09; 前提条件&#xff1a;已经安装Paddle和PadleVideo&#xff0c;具体可参考前一篇文章。 1-数据准备&#xff1a; 以UCF101为例&#xff1a;内含13320 个短视频&#xff0c;视频类别&…

uniapp引入微信小程序版本VantUI,使用VantUI的自定义tabbar,并解决自定义tabbar出现闪烁的情况

1.uniapp引入微信小程序版本VantUI 去vant官网下载源码&#xff0c;源码放在github&#xff0c;自行去下载下来 https://vant-contrib.gitee.io/vant-weapp/#/home 在pages.json的globalStyle里面注册组件 "globalStyle": {"navigationBarTextStyle": &qu…

zookeeper源码(12)命令行客户端

zkCli.sh脚本 这个命令行脚本在bin目录下: ZOOBIN="${BASH_SOURCE-$0}" ZOOBIN="$(dirname "${ZOOBIN}")" ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"# 加载zkEnv.sh脚本 if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; …

程序员开展副业的有效方法

目录 1 项目咨询1.1 建立个人品牌和专业形象1.2 寻找潜在客户1.3 提供定制化的技术咨询方案 2 软件开发2.1 加入平台寻找项目2.2 展示个人作品2.3 与客户保持良好沟通 3 传授编程知识3.1 选择适合的分享平台3.2 创作有价值的内容3.3 与观众保持互动 4 教育培训4.1 利用在线教育…