【备战秋招】每日一题:3月18日美团春招第四题:题面+题目思路 + C++/python/js/Go/java带注释

news2024/11/25 15:37:08

2023大厂笔试模拟练习网站(含题解)

www.codefun2000.com
最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200+道互联网大厂模拟练习题,还在极速更新中。欢迎关注公众号“塔子哥学算法”获取最新消息。
在这里插入图片描述
提交链接:

https://codefun2000.com/p/P1090

为了更好的阅读体检,可以查看OJ上的题解。进入提交链接,点击右边菜单栏的"查看塔子哥的题解"

题目内容

塔子哥是一位购物狂人,他经常光顾提瓦特商店。最近,提瓦特商店推出了一项促销活动,有 N N N件商品打折销售。每个商品都有原价和折扣价,而且不同的商品的折扣力度也不同。

塔子哥听说了这个促销活动后非常兴奋,他计划购买尽可能多的商品,同时也希望尽量少地花钱。他掏出了自己的钱包,发现他手头有 X X X元的现金和 Y Y Y张折扣券。

于是塔子哥找到了你,希望你能帮助他计算出在这种情况下他可以购买的最多商品数量以及花费的最少钱数。

输入描述

第一行三个整数,以空格分开,分别表示 N , X , Y N,X,Y N,X,Y

接下来 N N N行,每行两个整数,以空格分开,表示一个的原价和折扣价。

1 ≤ N ≤ 100 , 1 ≤ X ≤ 5000 , 1 ≤ Y ≤ 50 1 \leq N \leq 100,1 \leq X \leq 5000,1 \leq Y \leq 50 1N1001X50001Y50,每个商品原价和折扣价均介于 [ 1 , 50 ] [1,50] [1,50]之间。

输出描述

一行,两个整数,以空格分开。第一个数字表示最多买几个商品,第二个数字表示在满足商品尽量多的前提下所花费的最少的钱数。

样例 1 1 1

输入

2 5 1
3 1
1 1

输出

2 2

说明:
第一个商品折扣价购入,第二个商品原价购入,可以获得最多的商品数量 2 2 2个。此时消耗 2 2 2元。因此输出 22 2 2 22

样例 2 2 2

输入

5 10 2
10 6
5 3
7 4
4 3
15 3

输出

3 10

思路

动态规划解决.背包问题

状态:

d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k] 代表在考虑前 i i i 个物品时花费 j j j 元且已经用掉了 k k k 个折扣券时能买到的最多的商品.

这里用 a [ i ] a[i] a[i] 代表第 i i i 个商品的原价, b [ i ] b[i] b[i] 代表折扣价

转移:

使用每个商品更新 d p dp dp数组,考虑每个物品用或不用打折卷,有以下转移:
d p [ i ] [ j ] [ k ] = m a x ( d p [ i ] [ j ] [ k ] , d p [ i − 1 ] [ j − a [ i ] [ k ] + 1 , d p [ i − 1 ] [ j − b [ i ] ] [ k − 1 ] + 1 ) dp[i][j][k] = max(dp[i][j][k], dp[i-1][j-a[i][k]+1, dp[i-1][j-b[i]][k-1]+1) dp[i][j][k]=max(dp[i][j][k],dp[i1][ja[i][k]+1,dp[i1][jb[i]][k1]+1)

注意:代码实现时使用了刷表法,就是用 d p [ i − 1 ] [ j ] [ k ] dp[i-1][j][k] dp[i1][j][k] 去更新 d p [ i ] [ j + a [ i ] ] [ k ] dp[i][j+a[i]][k] dp[i][j+a[i]][k] d p [ i ] [ j + b [ i ] ] [ k + 1 ] dp[i][j+b[i]][k+1] dp[i][j+b[i]][k+1],和上面的式子实质是一样的。

更多具体细节见代码注释

类似题目推荐

leetcode

背包问题Leetcode题单总结-代码随想录

CodeFun2000

P1113 字节跳动-暑期实习-2023.03.24-第二题-元素骰子

P1247 美团-春招-2023.04.23-春招-第三题-农场大亨

P1212 塔子大厂真题模拟赛-第二题-魔法石(Ⅱ)

代码

python

n, x, y = map(int, input().split())
a, b = [0]*n, [0]*n
for i in range(n):
    a[i], b[i] = map(int, input().split())
dp = [[[-1]*(y+1) for i in range(x+1)] for j in range(2)]   #python使用滚动数组优化空间
dp[1][0][0] = 0     #用-1代表不能达到的状态,dp[1][0][0]代表一个商品没买的状态,使用1是因为滚动数组时采用二进制第0位作为标志,第0个物品的前一个用1表示
ans = [0,0]     #答案使用列表存储,便于更新,用python列表元素依次比较的原理更新,将第一维置反后取min代表先按第一维从大到小更新,再按第二维从小到大更新
for i in range(n):
    for j in range(x+1):
        for k in range(y+1):
            dp[i&1][j][k] = -1      #将当前位置的所有点初始化为-1
    for j in range(x+1):
        for k in range(y+1):
            if dp[i&1^1][j][k] == -1:   #使用上一次的数组dp[i&1^1]更新当前的dp[i&1],如果是-1说明不可达到,继续遍历下一个点
                continue
            la = dp[i&1^1][j][k]        #之前的dp值
            if j <= x-a[i]:         #如果还能买得起原价的商品,用原价的商品更新
                dp[i&1][j+a[i]][k] = max(dp[i&1][j+a[i]][k], la+1)  #因为初始化是-1,所以直接取max即可
                ans = min(ans, [-dp[i&1][j+a[i]][k], j+a[i]])
            if j <= x-b[i] and k < y:       #同上,用折扣价更新
                dp[i&1][j+b[i]][k+1] = max(dp[i&1][j+b[i]][k+1], la+1)
                ans = min(ans, [-dp[i&1][j+b[i]][k+1], j+b[i]])
            dp[i&1][j][k] = max(dp[i&1][j][k], dp[i&1^1][j][k])
print(-ans[0], ans[1])

C++

#include<bits/stdc++.h>
using namespace std;
const int N = 105;

int n, x, y;
int a[N], b[N];
int dp[N][1001][51];    // dp[i][j][k]:前i个物品,买了j元,购买的商品折扣次数为k的最大价值和。

int main()
{
    cin >> n >> x >> y;
    for(int i = 1 ; i <= n ; i ++) {
        cin >> a[i] >> b[i];   // 存储每个商品的原价、折扣价
    }
    memset(dp,-1, sizeof dp);  // 初始化所有状态为不可行
    dp[0][0][0] = 0;   // 没有购买任何商品的状态,可行,价值为0
    int ans = 0, mon = 0;   // ans记录达到最大价值,mon记录对应需要的钱数
    for(int i = 1 ; i <= n ; i ++) {     // 遍历每个商品
        for(int j = 0 ; j <= x ; j ++) {   // 遍历可以用来购买商品的钱数
            for(int k = 0 ; k <= y ; k ++) {   // 遍历可以使用的折扣次数
                if(dp[i-1][j][k] == -1) continue;   // 上一个状态不可达,则当前状态也不可达
                if(j <= x - a[i]) {    // 可以用原价购买商品,更新状态
                    dp[i][j+a[i]][k] = max(dp[i][j+a[i]][k], dp[i-1][j][k] + 1);    // 选择购买当前商品,状态转移方程
                    int t = dp[i][j+a[i]][k];   // 当前状态的价值
                    if(t > ans) ans = t, mon = j+a[i];   // 如果达到了更大的价值,更新记录
                    else if(t == ans) mon = min(mon, j+a[i]);   // 如果达到了同样大的价值,看购买商品的钱数是否更少
                }
                if(j <= x - b[i] && k != y) {   // 可以用折扣价购买商品,更新状态
                    dp[i][j+b[i]][k+1] = max(dp[i][j+b[i]][k+1], dp[i-1][j][k] + 1);   // 选择购买当前商品,状态转移方程
                    int t = dp[i][j+b[i]][k+1];   // 当前状态的价值
                    if(t > ans) ans = t, mon = j+b[i];   // 如果达到了更大的价值,更新记录
                    else if(t == ans) mon = min(mon, j+b[i]);   // 如果达到了同样大的价值,看购买商品的钱数是否更少
                }
                dp[i][j][k] = max(dp[i][j][k], dp[i-1][j][k]);   // 不购买当前商品,状态不变
            }
        }
    }
    cout << ans << ' ' << mon << endl;
}

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n, x, y;
        n = scanner.nextInt();
        x = scanner.nextInt();
        y = scanner.nextInt();

        int[] a = new int[n+1]; // 存储每个商品的原价
        int[] b = new int[n+1]; // 存储每个商品的折扣价
        for(int i=1; i<=n; i++) {
            a[i] = scanner.nextInt();
            b[i] = scanner.nextInt();
        }

        // dp[i][j][k]:前i个物品,买了j元,购买的商品折扣次数为k的最大价值和。
        int[][][] dp = new int[n+1][x+1][y+1];
        for(int i=0; i<=n; i++) {
            for(int j=0; j<=x; j++) {
                for(int k=0; k<=y; k++) {
                    dp[i][j][k] = -1; // 初始化所有状态为不可行
                }
            }
        }
        dp[0][0][0] = 0; // 没有购买任何商品的状态,可行,价值为0

        int ans = 0, mon = 0; // ans记录达到最大价值,mon记录对应需要的钱数
        for(int i=1; i<=n; i++) { // 遍历每个商品
            for(int j=0; j<=x; j++) { // 遍历可以用来购买商品的钱数
                for(int k=0; k<=y; k++) { // 遍历可以使用的折扣次数
                    if(dp[i-1][j][k] == -1) {
                        continue; // 上一个状态不可达,则当前状态也不可达
                    }
                    if(j <= x-a[i]) { // 可以用原价购买商品,更新状态
                        dp[i][j+a[i]][k] = Math.max(dp[i][j+a[i]][k], dp[i-1][j][k] + 1); // 选择购买当前商品,状态转移方程
                        int t = dp[i][j+a[i]][k]; // 当前状态的价值
                        if(t > ans) {
                            ans = t;
                            mon = j+a[i];
                        } else if(t == ans) {
                            mon = Math.min(mon, j+a[i]);
                        }
                    }
                    if(j <= x-b[i] && k != y) { // 可以用折扣价购买商品,更新状态
                        dp[i][j+b[i]][k+1] = Math.max(dp[i][j+b[i]][k+1], dp[i-1][j][k] + 1); // 选择购买当前商品,状态转移方程
                        int t = dp[i][j+b[i]][k+1]; // 当前状态的价值
                        if(t > ans) {
                            ans = t;
                            mon = j+b[i];
                        } else if(t == ans) {
                            mon = Math.min(mon, j+b[i]);
                        }
                    }
                    dp[i][j][k] = Math.max(dp[i][j][k], dp[i-1][j][k]); // 不购买当前商品,状态不变
                }
            }
        }
        System.out.println(ans + " " + mon);
    }
}

Go

package main

import (
	"fmt"
)

func main() {
	var n, x, y int
	fmt.Scan(&n, &x, &y)
	a := make([]int, n+1) // 存储每个商品的原价
	b := make([]int, n+1) // 存储每个商品的折扣价
	for i := 1; i <= n; i++ {
		fmt.Scan(&a[i], &b[i])
	}

	dp := make([][][]int, n+1) // 定义三维切片
	for i := range dp {
		dp[i] = make([][]int, x+1)
		for j := range dp[i] {
			dp[i][j] = make([]int, y+1)
			for k := range dp[i][j] {
				dp[i][j][k] = -1 // 初始化所有状态为不可行
			}
		}
	}
	dp[0][0][0] = 0 // 没有购买任何商品的状态,可行,价值为0
	ans, mon := 0, 0 // ans记录达到最大价值,mon记录对应需要的钱数
	for i := 1; i <= n; i++ { // 遍历每个商品
		for j := 0; j <= x; j++ { // 遍历可以用来购买商品的钱数
			for k := 0; k <= y; k++ { // 遍历可以使用的折扣次数
				if dp[i-1][j][k] == -1 { // 上一个状态不可达,则当前状态也不可达
					continue
				}
				if j <= x-a[i] { // 可以用原价购买商品,更新状态
					dp[i][j+a[i]][k] = max(dp[i][j+a[i]][k], dp[i-1][j][k]+1) // 选择购买当前商品,状态转移方程
					t := dp[i][j+a[i]][k] // 当前状态的价值
					if t > ans {
						ans, mon = t, j+a[i] // 如果达到了更大的价值,更新记录
					} else if t == ans && j+a[i] < mon {
						mon = j + a[i] // 如果达到了同样大的价值,看购买商品的钱数是否更少
					}
				}
				if j <= x-b[i] && k != y { // 可以用折扣价购买商品,更新状态
					dp[i][j+b[i]][k+1] = max(dp[i][j+b[i]][k+1], dp[i-1][j][k]+1) // 选择购买当前商品,状态转移方程
					t := dp[i][j+b[i]][k+1] // 当前状态的价值
					if t > ans {
						ans, mon = t, j+b[i] // 如果达到了更大的价值,更新记录
					} else if t == ans && j+b[i] < mon {
						mon = j + b[i] // 如果达到了同样大的价值,看购买商品的钱数是否更少
					}
				}
				dp[i][j][k] = max(dp[i][j][k], dp[i-1][j][k]) // 不购买当前商品,状态不变
			}
		}
	}
	fmt.Println(ans, mon)
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

Js

let input = "";
process.stdin.resume();
process.stdin.setEncoding("utf-8");
process.stdin.on("data", (data) => {
  input += data;
});
process.stdin.on("end", () => {
  const lines = input.trim().split("\n"); //将输入字符串按行分割,转化为数组
  const [n, x, y] = lines[0].trim().split(" ").map(Number);
  let a = Array(n).fill(0);
  let b = Array(n).fill(0);
  for (let i = 0; i < n; i++) {
    [a[i], b[i]] = lines[i + 1].trim().split(" ").map(Number);
  }
  let dp = new Array(2);
  for (let i = 0; i < 2; i++) {
    dp[i] = new Array(x + 1);
    for (let j = 0; j < x + 1; j++) {
      dp[i][j] = new Array(y + 1).fill(-1);
    }
  } //初始化dp数组

  dp[1][0][0] = 0; //dp[1][0][0]代表一个商品没买的状态
  let ans = [0, 0]; // ans[0]记录达到最大价值,ans[1]记录对应需要的钱数
  for (let i = 0; i < n; i++) { // 遍历每个商品
    let cur = i & 1;
    for (let j = 0; j < x + 1; j++) { 
      for (let k = 0; k < y + 1; k++) { 
        dp[cur][j][k] = -1; // 滚动数组初始化
      }
    } //复原dp数组
    for (let j = 0; j < x + 1; j++) {  // 遍历可以用来购买商品的钱数
      for (let k = 0; k < y + 1; k++) {  // 遍历可以使用的折扣次数
        if (dp[cur ^ 1][j][k] === -1) continue; //如果之前状态不可达,继续遍历下一个点
        let la = dp[cur ^ 1][j][k];
        if (j <= x - a[i]) { // 可以用原价购买商品,更新状态
          dp[cur][j + a[i]][k] = Math.max(dp[cur][j + a[i]][k], la + 1); // 选择购买当前商品,状态转移方程
            // 更新ans
          if (ans[0] > -dp[cur][j + a[i]][k]){
            ans = [-dp[cur][j + a[i]][k], j + a[i]];
          }else if (ans[0] == -dp[cur][j + a[i]][k] && ans[1] > j + a[i]){
            ans = [-dp[cur][j + a[i]][k], j + a[i]];
          }
        }
        if (j <= x - b[i] && k < y) { // 可以用折扣价购买商品,更新状态 同上
          dp[cur][j + b[i]][k + 1] = Math.max(dp[cur][j + b[i]][k + 1], la + 1);
          if (ans[0] > -dp[cur][j + b[i]][k + 1]){
            ans = [-dp[cur][j + b[i]][k + 1], j + b[i]];
          }else if (ans[0] == -dp[cur][j + b[i]][k + 1] && ans[1] > j + b[i]){
            ans = [-dp[cur][j + b[i]][k + 1], j + b[i]];
          }
        }
        dp[cur][j][k] = Math.max(dp[cur][j][k], dp[cur ^ 1][j][k]);
      }
    }
  }
  console.log(-ans[0] + " " + ans[1]);
}); //将答案数组输出,注意格式

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

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

相关文章

spring Security 认证失败,用户名和密码是正确的还是失败

项目用登录输入正确的用户名和密码为什么还是告知,用户名和密码是不正确? 有这几种情况 第一种是不是开启缓存,数据库中存储的是加密后的密码 第二种,查看源代码,这句是关键,presentedPassword是明文密码,userDetails.getPassword()是加密后的密码,进行比较 this.pa…

做好个人黄金投资,学习黄金投资交易原则

随着经济的发展,黄金逐渐成为金融投资的重要工具&#xff0c;越来越多的人开始关注黄金投资。想要做好个人黄金投资&#xff0c;建议先熟悉和学习黄金投资交易原则的内容。 黄金投资交易原则一、跟随趋势入场 在买入之前&#xff0c;首先应对行情的运行趋势有个明确的判断。一…

全网最全postman接口测试教程和项目实战~从入门到精通!!!

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

支撑企业未来10年高增长,用友资金管理平台助力新零售企业逆境破局

随着大数据、云服务、5G等技术的深化发展&#xff0c;人们消费观念及需求逐渐变化&#xff0c;我国新零售业数字化进程不断加快。近年来&#xff0c;新零售已经不仅局限于单一的零售范畴&#xff0c;逐步演变为集零售、快递物流、金融科技、企业服务、人工智能等各行各业为一体…

公司只有1个测试,领导却让我测试10个项目,这不是为难我....

读者提问&#xff1a;公司只有 1个测试&#xff0c;领导让我同时测试 10个项目&#xff0c;我该怎么办&#xff1f;回答&#xff1a;如果我是那个测试&#xff0c;我会做这三件事 1、向上申请资源2、任务分配到人3、执行测试任务 一、向上申请资源 1个测试同时对接 10个项目&a…

华为云认证的含金量高吗?数通考什么内容?

对于从事信息通信行业的人来说&#xff0c;拥有一份专业的证书&#xff0c;对提升自己的技能、职业竞争力是非常有帮助的&#xff0c;而华为云虽然是一个新兴的云计算厂商&#xff0c;但是咋断电几年之内&#xff0c;已经发展到了国内第二的位置&#xff0c;而且还在不断地发展…

java序列化和文件的输入和输出

文章目录 一、JAVA的序列化1. 简介2. 对象序列化的步骤3. 小结4. 序列化4. 解序列化 二、对象的序列化1. 简介2. Java.io.File.class3. 缓冲区 三、序列化版本控制 一、JAVA的序列化 1. 简介 如何将我们的java对象存储起来&#xff0c;这里介绍两种思路&#xff1a; 如果我们…

【JavaEE进阶】——第八节.SpringBoot统一功能处理

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;JavaEE进阶 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录 前…

智能公厕引导系统为未来共享公厕发展新趋势打造基础

智慧公厕管理系统可以提高公厕的服务质量和管理效率&#xff0c;实现公厕的自动化管理和数据分析。该系统可以广泛应用于各类公共场所&#xff0c;如商场、公园、机场、医院等。 一、智慧公厕引导系统案例展示 智慧公厕管理系统还可以实现公厕的人口统计和安全监控等功能。服务…

【今天聊聊AI】AI歌手会取代流行歌手吗

一、聊聊AI歌手发展现状 近日&#xff0c;“AI孙燕姿”火遍全网&#xff0c;AI孙燕姿翻唱林俊杰的《她说》、周董的《爱在西元前》、赵雷的《成都》等等歌曲让网友听了直呼&#xff1a;“听了一晚上&#xff0c;出不去了。” 现在AI歌手技术到底已经发展到了怎样的地步&#xf…

MySQL千万级数据优化方案

简介 ↓↓↓处理千万级数据的MySQL数据库&#xff0c;可以采取以下优化措施↓↓↓ 使用索引&#xff1a;确保对经常用于查询和排序的字段添加索引。不要在查询中使用SELECT *&#xff0c;而是明确指定需要的字段。分区表&#xff1a;如果表中的数据按照时间或其他维度进行划分&…

26岁机电专业,零基础转行学云计算,求推荐靠谱机构!

26岁机电专业&#xff0c;零基础转行学云计算&#xff0c;求推荐靠谱机构&#xff01; 关于26岁零基础转行云计算&#xff0c;求机构推荐这类问题。建议可以先把自己的具体需求整理清楚&#xff0c;例如自身的学习能力情况、需要学习的专业的技术内容、你想要通过培训学习达到什…

承接vue2->vue3的一些变动

1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/releases/tag/v3.0.0 …

NetApp FAS 混合闪存阵列协助您建构简单易用、聪明智慧、值得信赖的储存基础架构

NetApp FAS 混合闪存阵列 主要优势 1、简单易用&#xff1a;节省您宝贵的时间、金钱和人力 •几分钟内完成储存资源配置。 •以获证实的效率技术降低成本。 •可在单一系统上管理档案与区块资料。 2、聪明智慧&#xff1a;灵活因应瞬息万变的业务需求 •以不中断营运的方式扩…

javascript中的错误类型

javascript 中的错误类型&#xff1a; SyntaxErrorTypeErrorReferenceErrorRangeErrorURLErrorError SyntaxError 语法错误 // 当您在编写一个函数时忘记了括号 ,)来括起您的代码&#xff0c;您将收到一个SyntaxError错误 function say(text) {return text; }say(shark;// …

[论文阅读72]Parameter-Efficient Transfer Learning for NLP

1. 基本信息 题目论文作者与单位来源年份Parameter-Efficient Transfer Learning for NLPNeil Houlsby等Google Research&#xff0c;雅盖隆大学-波兰PMLR2019 Houlsby N, Giurgiu A, Jastrzebski S, et al. Parameter-efficient transfer learning for NLP[C]//Internationa…

代码随想录训练营Day49| 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

目录 学习目标 学习内容 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 学习目标 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 学习内容 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/prob…

chatgpt赋能Python-python_ip地址转换

Python IP地址转换&#xff1a;原理、常用函数和示例 在网络编程中&#xff0c;IP地址是一个很重要的概念。Python提供了很多IP地址转换函数&#xff0c;这篇文章将讲解其原理、常用函数和示例。 IP地址转换原理 IP地址是由32位表示的二进制数&#xff0c;它是计算机在网络上…

socket概述 python中如何使用TCP/UDP协议实现通信-教程

很多编程语言中&#xff0c;都使用scoket套接字实现网络通信。 Socket是对TCP/IP协议的封装&#xff0c;Socket本身就是一个调用接口&#xff08;API&#xff09;&#xff0c;方便程序员用Socket使用TCP/IP协议簇&#xff0c;实现网络通信。 不同编程语言&#xff0c;shiyong…

基于ROS2的costmap中Obstacle Layer中对障碍物信息的增加与删除机制的方案调研。

文章目录 1.背景2.目标3. 障碍物信息添加方式发送数据的数据结构与接收数据的数据结构 4. 障碍物清理机制4.1 可调参数4.2 优化光追算法4.3 障碍物跟踪 1.背景 基于costmap地图&#xff0c;使用navigation导航时&#xff0c;会出现由于激光雷达/图像测距的局限性&#xff0c; …