当前位置: 首页 > 知识库问答 >
问题:

穿越城市-这种情况是解决方案中缺少的吗?

轩辕越泽
2023-03-14

警告:这个问题需要一些初步的努力才能理解

这个问题并不完全是动态规划的重复:城市遍历。让我们假设我有以下4个城市的图表[0-3]:

  d[0][1] = 1;
  d[0][2] = 2;
  d[0][3] = 5;
  d[1][2] = 3;
  d[1][3] = 6;
  d[2][3] = 4;

链接中提出的解决方案是

C[i,j] = {
   C[i,j-1] + d[j-1,j]                   (if i < j-1)
   min C[k,i] + d[k,j] for 0 <= k < i    (if i = j-1)
}

但是让我们计算c[1][2]:

c[1][2] = min between {
           k = 0 => C[0,1] + d[0][2]
          }

这很有意义,但这不是在这一步评估的唯一路径,因为我可以将城市[0,1]分组到第一个集合中,而将[2]单独放在第二个集合中。在这种情况下,它会是

c[1][2] = min between {
           k = 0 => C[0,1] + d[0][2]
           d[0][1]
          }

在这一点上,我想问我的反对是否有意义。如果确实如此,并且上面链接中提出的算法是错误的,我应该如何在解决方案中包含这种情况?我试图递归地表达它,但无法得出任何简单的东西。

共有1个答案

楚宇
2023-03-14

您所指的解决方案确实是不完整的,并且没有考虑到第二个旅行者从< code>j开始的情况。为此,将递归关系更新为:

C[i,j] = {
   C[i,j-1] + d[j-1,j]                   (if i < j-1)
   min C[k,i] + d[k,j] for 0 <= k < i
       and C[0,i]                        (if i = j-1)
}

这里的例外情况是C[0,1],它应该设置为d[0,1]

通过这种方式,您还可以考虑第二个旅行者刚刚开始时的情况(C[0,i]将是第一个从0到i旅行的旅行者的成本,并且第二个旅行者从j = i 1开始没有费用)。

请注意,您也可以替换 0

 类似资料:
  • 我遇到了这个问题: 有两个人。有一个由 n 个城市组成的有序序列,并给出了每对城市之间的距离。您必须将城市划分为两个子序列(不一定是连续的),以便人员 A 访问第一个子序列中的所有城市(按顺序),人员 B 访问第二个子序列中的所有城市(按顺序),并且使 A 和 B 行进的总距离之和最小化。假设人员 A 和人员 B 最初从其各自子序列中的第一个城市开始。 我寻找它的答案,答案是:< br >假设c[

  • 我用Android NDK编译ffmpeg,当我运行config.sh时,发生了很多错误,如何解决。 /toolchains/arm-linux-androideabi-4.6/prebuild/windows/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x-wl,-rpath-link=/cygdrive/e/android/and

  • 报的这个错误缺依赖在网上搜了一堆又是清缓存升级啥的没好使,前端环境也没什么问题有没有可能是这个版本太老了

  • 我正在解决这个问题:回文子串 给定一个字符串,您的任务是计算该字符串中有多少回文子字符串。 具有不同开始索引或结束索引的子字符串被计为不同的子字符串,即使它们包含相同的字符。 我尝试了多种方法,根据我的说法,这两种方法的复杂性都为。但是leetcode接受一种解决方案并返回超过另一种解决方案的时间限制。 可接受的解决方案: 超出时间限制的解决方案 这两种算法中唯一的变化是,第一种算法使用Pytho

  • 本文向大家介绍Python运行提示缺少模块问题解决方案,包括了Python运行提示缺少模块问题解决方案的使用技巧和注意事项,需要的朋友参考一下 背景: 在pycharm中运行正常,但是使用命令方式就提示没有模块 解决方案 在Python安装目录下的\Lib\site-packages文件夹中建立一个.pth文件,内容为自己写的 查看包是否有导入 再次运行,就成功了 以上就是本文的全部内容,希望对大

  • 这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是: