- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
UPD .我解决了这个问题。
让 DP[i][vertex_a][vertex_b]
是带有 i
的状态访问的城市和两个站在顶点的玩家 vertex_a, vertex_b
(保证其中之一为 list[i]
)。 WLOG 假设 vertex_a ≤ vertex_b
像这样 DP
表不包含有关球员位置的信息。从 DP[i][vertex_a][vertex_b]
只能到达三个状态,即 DP[i + 1][vertex_a][vertex_b]
, DP[i + 1][list[i]][vertex_b]
, DP[i + 1][vertex_a][list[i]]
.我们也只需要存储两层DP
,所以只有 sizeof(int) * 2 * 200 * 200
计算最佳路径成本所需的字节数。要获得路径,将有 last_move_id[i][vertex_a][vertex_b]
携带有关在状态下移动的玩家的信息 DP[i][vertex_a][vertex_b]
和 last_move_positions[i][vertex_a][vertex_b]
存储玩家到达的顶点数量list[i]
.由于顶点数不超过 200,因此可以将它们存储为 byte
,所以 sizeof(byte) * 1000 * 200 * 200
每个数组的字节数。为了维护这些数组,必须有另一个数组 positions[i][vertex_a][vertex_b][3]
携带每个玩家的位置信息,只需要最后两层,所以sizeof(byte) * 2 * 200 * 200 * 3
这个字节。时间复杂度 O(N * L * L)
.
我的 C++
实现使用 76Mb
和 320 ms
.
我正在努力解决来自俄罗斯在线法官的以下竞争性编程问题 http://informatics.mccme.ru/moodle/mod/statements/view.php?chapterid=3379 .根据规则,必须提供我记得的问题的来源
不幸的是,没有英文版的网站,所以我会尝试描述问题。
Input consists of the complete digraph
G
withL
vertices and some list of vertices (length at mostN
). Three people start at vertices1, 2, 3
respectively. They have to visit each vertex from the input list, order matters, vertexi + 1
is necessarily visited afteri
. At one point of time only one person can make a move (if one person goes from some previous vertex to vertexi
others stand still, they can't move in parallel). If person/player stands at vertexi
and has to move to vertexj
he must take an edge(i, j)
instead of some shortest path to vertex j (Floyd–Warshall algorithm can't used to speed up computations here). It is sufficent for a vertex to be visited by a single person which means that all of them can be visited by person 1 while other would stand still. The cost of edge(i, i)
is always0
, there are no multi-edges, all edge weights are non-negative andG
is represented asL x L
adjacency matrix. Output the cost of shortest possible path for these three people to visit vertices from list amd output what person visited each vertex. Input list of vertices to be visited is a multiset (N
may be bigger thanL
)
O(L^3)
对于城市序列的两人遍历,它将是
O(N^4)
对于我的问题,即使
O(N^3)
也太慢了算法不会满足时间限制,我认为类似
O(LN^2)
虽然可以工作。
3 ≤ L ≤ 200, 1 ≤ N ≤ 1000
0 ≤ edge weight ≤ 2000
Time limit: 1s, memory limit is 256 Mb
2D dynamic programming
.
2D
动力学。我想到了一个非常简单的方法来解决这个问题:
(1, 2, 3)
.在处理第一个顶点时,我们计算:
1:(list[1], 2, 3) = (1, 2, 3) + weight(1, list[1])
1:(1, list[1], 3) = (1, 2, 3) + weight(2, list[1])
1:(1, 2, list[1]) = (1, 2, 3) + weight(3, list[1])
.
4D
动态表,但我认为保持当前迭代次数是不必要的,使其成为
3D
一。此外,可以注意到,对于计算第 (i+1) 层,第一层只需要有关第 i 层的信息,这使其成为一种很好的内存优化。尽管如此,如果我们忘记图中最多只有 200 个顶点并将状态视为元组
(i, j, k)
, 其中 i, j, k 是最后阶段 1, 2, 3 移动的人数,这意味着在第 m 阶段 i, j, k 中的一个等于 m。按照这个逻辑并考虑所有可能的重复,第 m 个阶段的不同元组的数量是:
Number_at_stage(m) = Number_at_stage(m - 1) + 6 * (m - 1)
,
Number_at_stage(1) = 3, Number_at_stage(2) = 9, Number_at_stage(1000) = 2991009.
Number_at_stage(1)
我从以下想法中得到:
(0, 0, 0) -> (1, 0, 0), (0, 1, 0), (0, 0, 1)
1..1000
并得到了一个可怕的数字
997004997
这几乎是十亿。这意味着代表这种移动的不同元组的数量是渐近三次的(并不奇怪,但很明显)。我不明白如何改进这个想法。以这种方式思考,我不知道如何处理诸如 (i, j, k) 和 (k, j, i) 之类的状态,因为它们实际上是等效的,因为可以基于相同的步骤集在这些上。我只是不知道如何处理这些状态并保留信息哪些人访问了哪个城市(简单的多维数组?)。
最佳答案
给出 list[i]
时 3 个玩家的可能状态被访问,以及到目前为止与每个这样的状态相关的成本,计算 list[i+1]
的可能状态和成本.当您到达 list[N-1]
,选择最低成本。保留前导链接,以便您可以遍历整个序列回到开头并输出它。
我很确定你已经得到了这么多......这是你错过的部分:
当list[i]
时有多少个可区分的状态被访问了?嗯,还不到 L^3 ,因为哪个玩家在哪个顶点上并不重要。也小于 L^3/3! ,因为显然至少有一名玩家在 list[i]
上!
因此,一名玩家在 list[i]
上并且只有 L(L+1)/2 其他球员可区分的位置。这意味着最多有 20100 每个 list[i]
的可能状态,以及每个列表索引的整个可能性数组中大约 20M 可能的状态。如果您对存储状态和链接的方式稍加小心,则可以满足 256MB 的内存限制。
关于algorithm - 三人按给定顺序访问某些图节点的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46759883/
在下面的代码中,我得到一个 uninitialized value警告,但仅限于第二个 given/when例子。为什么是这样? #!/usr/bin/env perl use warnings; u
整个“开关”功能是否已成为实验性的?在没有 Perl 的 future 版本破坏我的代码的情况下,我可以依赖其中的某些部分吗?一般来说,将稳定功能更改为实验性的政策是什么? 背景use feature
有没有办法在一个条件语句中写出如下语句? a和b不能同时等于5。 (a可以是5,b可以是5,但是a AND b不能是5) 最佳答案 正如克里斯指出的那样,您要查找的是逻辑异或,相当于逻辑不等于 !=:
我正在寻找一种算法来找到给定 n 条线段的所有交点。以下是来自 http://jeffe.cs.illinois.edu/teaching/373/notes/x06-sweepline.pdf 的伪
数组中有 N 个元素。我可以选择第一项最多 N 次,第二项最多选择 N-1 次,依此类推。 我有 K 个 token 要使用并且需要使用它们以便我可以拥有最大数量的项目。 arr = [3, 4, 8
我正在尝试修复法语文本中的语法性别,想知道是否有办法从某个词条中获取所有单词的列表,以及是否可以在此类列表中进行查找? 最佳答案 尝试: import spacy lemma_lookup = spa
我正在为 Win32 编写一个简单的自动化测试应用程序。它作为一个单独的进程运行,并通过 Windows API 访问目标应用程序。我可以阅读窗口层次结构,查找标签和文本框,并通过发送/发布消息等来单
在 nodeJs 中使用 Sequelize 时,我从 Sequelize 收到此错误,如下所示: { [SequelizeUniqueConstraintError: Validation erro
本文https://arxiv.org/pdf/1703.10757.pdf使用回归激活映射 (RAM) - 而不是类激活映射 (CAM) 来解决问题。有几篇文章描述了如何实现 CAM。但是我找不到
我正在研究 Mach 动态链接器 dyld。这个问题适用于所有 Apple 平台,但很高兴得到特定于平台的答案;我正在使用 ObjC,但如果对你有用的话,我也很乐意翻译 Swift。 The rele
我有一个包含数千个 Instagram 用户 ID 的列表。我如何获得他们的 Instagram 用户名/句柄? 最佳答案 你必须使用这个 Instagram API: https://api.ins
我在下面的代码: def main(args: Array[String]) { val sparkConf = new SparkConf().setAppName("Spark-Hbase").s
我有一个表格,其中包含从 1 到 10 的数字。(从 D2 到 M2) 假设A1中有03/09/2019 并且在B1中有06/09/2019 并且在C1中有Hello 在A 列中,我有多个系列的单词,
我想在给定服务对应的 URI 的情况下检索服务的注释(特别是 @RolesAllowed )。这是一个例子: 服务: @GET @Path("/example") @RolesAllowed({ "B
我看到 OraclePreparedStatementexecuteQuery() 表现出序列化。也就是说,我想使用相同的连接对 Oracle 数据库同时运行两个查询。然而,OraclePrepare
import java.util.Scanner; public class GeometricSumFromK { public static int geometricSum(int k,
我创建了一个抽象基类Page,它说明了如何构建动态网页。我正在尝试想出一种基于作为 HttpServletRequest 传入的 GET 请求生成 Page 的好方法。例如... public cla
我的字符串是一条短信,采用以下两种格式之一: 潜在客户短信: 您已收到 1 条线索 标题:我的领导 潜在客户 ID:12345-2365 警报设置 ID:890 短信回复: 您已收到 1 条回复 标题
我在 python 中有以下代码: class CreateMap: def changeme(listOne, lisrTwo, listThree, listFour, listfive):
这是在 Hibernate 上运行的 JPA2。 我想检索相同实体类型的多个实例,给定它们的 ID。其中许多已经在持久性上下文和/或二级缓存中。 我尝试了几种方法,但似乎都有其缺点: 当我使用 ent
我是一名优秀的程序员,十分优秀!