目录
示例
Input
输出
首页 后端开发 C++ C++程序用于计算机器人在网格中完成一次行程所需的总成本

C++程序用于计算机器人在网格中完成一次行程所需的总成本

Aug 25, 2023 pm 04:53 PM
成本 网格 计算机器人

C++程序用于计算机器人在网格中完成一次行程所需的总成本

假设我们有一个尺寸为 h x w 的网格。网格中的每个单元格包含一个正整数。现在有一个路径查找机器人放置在特定的单元格(p,q)上(其中 p 是行号,q 是列号),它可以移动到单元格(i,j)。移动操作有一个特定的成本,等于 |p - i| + |q - j|。现在有 q 个旅行,具有以下属性。

  • 每个旅行有两个值(x,y),并且有一个共同的值 d。

  • 机器人放置在一个值为 x 的单元格上,然后移动到另一个值为 x + d 的单元格。

  • 然后它移动到另一个值为 x + d + d 的单元格。这个过程将继续,直到机器人到达一个值大于或等于 y 的单元格。

  • y - x 是 d 的倍数。

给定这些旅行,我们必须找出每次旅行的总成本。如果机器人无法移动,则旅行成本为 0。

因此,如果输入是 h = 3,w = 3,d = 3,q = 1,grid = {{2,6,8},{7,3,4},{5,1,9}},trips = {{3,9}},那么输出将是 4。

3 在单元格(2,2)上

6 在单元格(1,2)上

9 在单元格(3,3)上

总成本 = |(1 - 2)+(2 - 2)| + |(3 - 1)+(3 - 2)| = 4。

要解决这个问题,我们将按照以下步骤进行:

Define one map loc
for initialize i := 0, when i < h, update (increase i by 1), do:
   for initialize j := 0, when j < w, update (increase j by 1), do:
      loc[grid[i, j]] := new pair(i, j)
Define an array dp[d + 1]
for initialize i := 1, when i <= d, update (increase i by 1), do:
   j := i
   while j < w * h, do:
      n := j + d
      if j + d > w * h, then:
      Come out from the loop
   dx := |first value of loc[n] - first value of loc[j]|
   dy := |second value of loc[n] - second value of loc[j]|
   j := j + d
   insert dx + dy at the end of dp[i]
for initialize j := 1, when j < size of dp[i], update (increase j by 1), do:
   dp[i, j] := dp[i, j] + dp[i, j - 1]
for initialize i := 0, when i < q, update (increase i by 1), do:
   tot := 0
   le := first value of trips[i]
   ri := second value of trips[i]
   if ri mod d is same as 0, then:
      f := d
   Otherwise,
         f := ri mod d
   pxl := (le - f) / d
   pxr := (ri - f) / d
   if le is same as f, then:
    if ri is same as f, then:
      tot := 0
   Otherwise
      tot := tot + (dp[f, pxr - 1] - 0)
   Otherwise
      if ri is same as f, then:
            tot := 0
  Otherwise
tot := tot + dp[f, pxr - 1] - dp[f, pxl - 1]
print(tot)
登录后复制

让我们看下面的实现以更好地理解 −

示例

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
void solve(int h, int w, int d, int q, vector<vector<int>> grid,
vector<pair<int, int>> trips) {
   map<int, pair<int, int>> loc;
   for (int i = 0; i < h; i++) {
      for (int j = 0; j < w; j++)
         loc[grid[i][j]] = make_pair(i, j);
   }
   vector<int> dp[d + 1];
   for (int i = 1; i <= d; i++) {
      int j = i;
      while (j < w * h) {
         int n = j + d;
          if (j + d > w * h)
             break;
             int dx = abs(loc[n].first - loc[j].first);
             int dy = abs(loc[n].second - loc[j].second);
             j += d;
             dp[i].push_back(dx + dy);
      }
      for (j = 1; j < dp[i].size(); j++)
        dp[i][j] += dp[i][j - 1];
   }
   for (int i = 0; i < q; i++) {
      int tot = 0;
      int le, ri;
      le = trips[i].first;
      ri = trips[i].second;
      int f;
      if (ri % d == 0)
         f = d;
      else
         f = ri % d;
      int pxl, pxr;
      pxl = (le - f) / d;
      pxr = (ri - f) / d;
      if (le == f){
         if (ri == f)
            tot = 0;
         else
            tot += (dp[f][pxr - 1] - 0);
      } else {
         if (ri == f)
            tot = 0;
         else
            tot += dp[f][pxr - 1] - dp[f][pxl - 1];
      }
      cout<< tot << endl;
    }
}
int main() {
   int h = 3, w = 3, d = 3, q = 1;
   vector<vector<int>> grid = {{2, 6, 8}, {7, 3, 4}, {5, 1, 9}};
   vector<pair<int, int>> trips = {{3, 9}};
   solve(h, w, d, q, grid, trips);
   return 0;
}
登录后复制

Input

3, 3, 3, 1, {{2, 6, 8}, {7, 3, 4}, {5, 1, 9}}, {{3, 9}}
登录后复制

输出

4
登录后复制

以上是C++程序用于计算机器人在网格中完成一次行程所需的总成本的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

用于精确目标检测的多网格冗余边界框标注 用于精确目标检测的多网格冗余边界框标注 Jun 01, 2024 pm 09:46 PM

一、前言目前领先的目标检测器是基于深度CNN的主干分类器网络重新调整用途的两级或单级网络。YOLOv3就是这样一种众所周知的最先进的单级检测器,它接收输入图像并将其划分为大小相等的网格矩阵。具有目标中心的网格单元负责检测特定目标。今天分享的,就是提出了一种新的数学方法,该方法为每个目标分配多个网格,以实现精确的tight-fit边界框预测。研究者还提出了一种有效的离线复制粘贴数据增强来进行目标检测。新提出的方法显着优于一些当前最先进的目标检测器,并有望获得更好的性能。二、背景目标检测网络旨在使用

路径图展示了AI '替代” 人类职业的趋势 路径图展示了AI '替代” 人类职业的趋势 Jan 04, 2024 pm 04:32 PM

我昨天看到了一张有趣的图片,上面是一个“AI取代人类路径的级别图”。图片根据图中的显示,游戏分为六个不同的等级,从E1到E8+。从图中我们可以观察到,人工智能(AI)正在取代人类在不同领域的应用。而人工智能的应用领域路径则是由其容错率来决定的。简而言之,这里的容错率就是指试错所带来的成本。AI将逐渐取代从容错率较高到较低的行业,逐渐“取代”人类职业。以往,我们常认为创意型的工作需要依赖人类的思维,是不容易被取代的。然而,随着人工智能的发展,这种看法似乎并不完全正确。像创意类的工作往往没有固定答案

苹果手机中设置相机网格的操作步骤 苹果手机中设置相机网格的操作步骤 Mar 26, 2024 pm 07:21 PM

1、打开苹果手机的桌面,找到并点击进入【设置】,2、在设置的页面点击进入【相机】。3、点击打开【网格】右侧的开关即可。

CSS布局技巧:实现圆形网格图标布局的最佳实践 CSS布局技巧:实现圆形网格图标布局的最佳实践 Oct 20, 2023 am 10:46 AM

CSS布局技巧:实现圆形网格图标布局的最佳实践在现代网页设计中,网格布局是一种常见且强大的布局技术。而圆形网格图标布局则是一种更加独特和有趣的设计选择。本文将介绍一些最佳实践和具体代码示例,帮助你实现圆形网格图标布局。HTML结构首先,我们需要设置一个容器元素,在这个容器里放置图标。我们可以使用一个无序列表(&lt;ul&gt;)作为容器,列表项(&lt;l

首个千亿模型压缩算法 SparseGPT 来了,降低算力成本的同时保持高精度 首个千亿模型压缩算法 SparseGPT 来了,降低算力成本的同时保持高精度 Apr 12, 2023 pm 01:01 PM

​自 2020 年 GPT-3 横空出世以来,ChatGPT 的爆火再一次将 GPT 家族的生成式大型语言模型带到聚光灯下,它们在各种任务中都已显示出了强大的性能。但模型的庞大规模也带来了计算成本的上升和部署难度的增加。比如,GPT‑175B 模型总计至少占 320GB 半精度 (FP16) 格式的存储空间,在推理时,起码需要五个 80 GB 存储空间的 A100 GPU。模型压缩(model compression)是当前使用较多的一种降低大模型计算成本的方法,但迄今为止,几乎所有现有的

云端生成式AI:自建还是购买? 云端生成式AI:自建还是购买? Dec 19, 2023 pm 08:15 PM

大卫·林思高编译|言征51CTO技术栈(微信号:blog51cto)的出品在技术领域有一个不成文的规则:大家都喜欢采用别人的技术。但对于许多企业来说,生成式人工智能似乎并不符合这一模式生成式AI正在迅速推动一些关键决策。每个组织都面临着一个重要的选择:是内部构建定制的生成式AI平台,还是从AI供应商那里购买预打包的解决方案(通常作为云服务提供)DIY有利于数量和机会。这很奇怪,但原因可能会让你感到惊讶。它们甚至可能会引导您重新思考您的企业genAI战略1、完整的定制和控制重新写内容如下:建立一个

使用C++编程,找到在网格中从一个点到另一个点的路径数量 使用C++编程,找到在网格中从一个点到另一个点的路径数量 Aug 29, 2023 pm 10:25 PM

在本文中,我们给出了一个问题,我们需要找到从点A到点B的总路径数,其中A和B是固定点,即A是网格中的左上角点,B是网格中的右下角点,例如−Input:N=5Output:252Input:N=4Output:70Input:N=3Output:20在给定的问题中,我们可以通过简单的观察来形式化答案并得出结果。寻找解决方案的方法在这种方法中,我们通过观察得出一个公式,即从A到B穿过网格时,我们需要向右行进n次,向下行进n次,这意味着我们需要找到所有可能的路径组合,因此我们得到了

C++程序用于找出机器人在网格中到达特定单元所需的跳跃次数 C++程序用于找出机器人在网格中到达特定单元所需的跳跃次数 Sep 17, 2023 pm 07:17 PM

假设我们有一个hxw的网格。网格在一个名为'initGrid'的二维数组中表示,其中网格中的每个单元格都用'#'或'.'表示。'#'表示网格中有障碍物,'.'表示该单元格上有一条路径。现在,一个机器人被放置在网格上的一个单元格'c'上,该单元格具有行号x和列号y。机器人必须从一个具有行号p和列号q的单元格'd'移动到另一个单元格。单元格坐标c和d都以整数对的形式给出。现在,机器人可以按以下方式从一个单元格移动到另一个单元格:如果机器人想要移动到的单元格位于当前单元格的垂直或水平相邻位置,机器人可

See all articles