- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经坐了将近一个星期了。 Here是 PDF 格式的问题。
到目前为止我只能想到一个想法,但它失败了。这个想法是递归地创建所有在 O(num_of_connected_subgraphs) 中工作的连接子图,但这太慢了。
如果有人能给我指明方向,我将不胜感激。我倾向于认为唯一的方法是动态规划,但我似乎无法弄清楚该怎么做。
最佳答案
好的,这是我提出的算法的概念性描述:
在两个维度上形成一个从 -7 到 7 的 (x,y) 棋盘图数组,并将对手的棋子放在上面。
从第一行开始(最低 Y 值,-N):
枚举该行第二位玩家棋子的所有可能组合,仅消除与对手棋子冲突的组合。
对于此行中的每个组合:--将连接的部分分组到单独的网络中并编号 网络以 1 开始,升序
--使用以下方法将行编码为向量:
= 0 for any unoccupied or opponent position
= (1-8) for the network group that that piece/position is in.
--给每个这样的分组 COUNT 1,并使用编码向量作为其键将其添加到字典/哈希集中
现在,对于每个后续行,按升序 {y=y+1}:
对于前一行字典中的每个条目:
--如果条目恰好有1组,则将其COUNT加到TOTAL
--枚举第二位玩家棋子的所有可能组合 在当前行,只删除那些与 对手棋子。 (更改:)您应该跳过初始组合 (其中所有条目均为零)对于此步骤,实际上与上面的步骤一样 覆盖它。对于当前行中的每个这样的组合:
+ produce a grouping vector as described above
+ compare the current row's group-vector to the previous row's
group-vector from the dictionary:
++ if there are any group-*numbers* from the previous row's
vector that are not adjacent to any gorups in the current
row's vector, *for at least one value of X*, then skip
to the next combination.
++ any groups for the current row that are adjacent to any
groups of the previous row, acquire the lowest such group
number
++ any groups for the current row that are not adjacent to
any groups of the previous row, are assigned an unused
group number
+ Re-Normalize the group-number assignments for the current-row's
combination (**) and encode the vector, giving it a COUNT equal
to the previous row-vector's COUNT
+ Add the current-row's vector to the dictionary for the current
Row, using its encoded vector as the key. If it already exists,
then add it's COUNT to the COUNT for the pre-exising entry
最后,对于最后一行字典中的每个条目:
**:重新归一化只是意味着重新分配组号,以消除分组模式中的任何排列。具体来说,这意味着新的组号应按递增顺序分配,从左到右,从一个开始。因此,例如,如果您的分组向量在将 ot 分组到上一行之后看起来像这样:
2 0 5 5 0 3 0 5 0 7 ...
它应该被重新映射到这个正常的形式:
1 0 2 2 0 3 0 2 0 4 ...
请注意,如本例所示,在第一行之后,分组可以不连续。这种关系必须保留,因此在重新归一化中将两组“5”重新映射到相同的数字(“2”)。
好的,一些注意事项:
一个。我认为这种方法是正确的,但我真的不确定,所以它肯定需要一些审查等。
B.虽然很长,但还是很简略的。每个单独的步骤本身都非常重要。
C.虽然有很多单独的优化机会,但整体算法仍然相当复杂。这比蛮力好很多,但即便如此,我的餐巾纸估计仍然在 N=7 的 (2.5 到 10)*10^11 次左右。
所以它可能很容易处理,但距离在 3 秒内完成 74 个案例还有很长的路要走。我还没有阅读 Peter de Revaz 回答的所有细节,但他旋转“钻石”的想法可能适用于我的算法。虽然它会增加内部循环的复杂性,但它可能会降低字典的大小(因此,要比较的分组向量的数量)多达 100 倍,尽管如果不实际尝试它真的很难说.
好的,我列举了所有可能的有效分组向量以获得对上面 (C) 的更好估计,这将它降低到 O(3.5*10^9) 对于 N=7。这要好得多,但仍然比您在 3 秒内完成 74 次测试所需的时间高出一个数量级。不过,这确实取决于测试,如果它们中的大多数小于 N=7,它可能能够成功。
关于algorithm - 解决 ACM ICPC - SEERC 2009,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759143/
我正在尝试编译以下代码: #include int main() { std::map test; return 0; } 使用以下命令: icpc -I /usr/include/x86_
我正在尝试用 C++ 编译一段代码,它使用了过度对齐的变量。如果我尝试编译以下代码(MWE) #include #include int main() { alignas(32) doub
我在练ACM ICPC 历代题http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble
昨天我们在PC上进行了练习^2,它是比赛的官方裁判软件,但我遇到了问题,我的问题代码是正确的,答案也是正确的,但当我将其发送到软件时它回答我“运行时错误”。 我认为我的问题在输入文件中,他们想要来自输
一个相当基本的问题,但我在这里有点迷路。我正在开发一个处理复数的库。到目前为止,我在 Mac OS 10.8 和 Ubuntu 10.04 下使用了我的实现(通过在 Man 上使用 llvm-gcc,
我正在尝试编译#includes 库的代码 在代码中我有以下几行: int main() { clock_t begin = clock(); random_device rd;
我有以下测试代码: // friendfunction.h
我在 Linux 上安装了英特尔编译器 composer_xe_2013_sp1.3.174。我对 icc 警告感到困惑。用一个简单的程序 main.c 喂 icc,如下所示: int main(in
我在以下 $HOME/tpl/intel 安装了 intel 编译器。当我编译启用了 openMP 的简单 hello_omp.cpp #include #include int main ()
我在我的大学领导一小群开发人员,我想解决前几年的几个 ICPC 问题集。 在 Google 上搜索不会产生有用的结果,只会出现一页页的损坏链接和私有(private) .edu 域。 有谁知道在哪里可
我正在尝试使用具有 c++11 功能的 icpc,但是我需要一个 c++11 stdlib,intel 没有提供。 我在 RHEL 6 上以用户身份运行,因此系统 libstdc++ 已过时。安装了较
有许多在线判断网站可以通过将其输出与正确答案进行比较来验证您的程序。此外,他们还会检查运行时间和内存使用情况,以确保您的程序没有超过最大限制。 那么问题来了,有些在线评委网站同时运行多个测试程序,他们
出于好奇,我查看了 2009 年 ACM 国际大学生程序设计竞赛的问题集。这些问题很有趣。它们可在 http://cm.baylor.edu/resources/pdf/2009Problems.pd
我已经坐了将近一个星期了。 Here是 PDF 格式的问题。 到目前为止我只能想到一个想法,但它失败了。这个想法是递归地创建所有在 O(num_of_connected_subgraphs) 中工作的
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我使用的是 Ubuntu 14.04 & eclipse & intel 编译器 v 15 我有 2 个相同的程序(使用 cilk 命令)(一个作为 c 程序,另一个作为 cpp 程序)。 我可以用
玩具代码非常简单: #include #include #define A 10 #define SIZE (int)(ceil(A / 2)) // needs computation but
这个问题是 ACM ICPC 坎普尔地区淘汰赛中提出的问题的子问题: 给定由二维点界定的 2 条线段 (Pa, Pb)和 (Pc, Pd)分别找到p和 q (在 [0,1] 范围内)最小化函数 f(p
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!