- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
免责声明:此问题涉及相应社论中的内容。因此,如果您想自己解决这个问题,我不鼓励您阅读这篇文章。另外,我的问题遗漏了社论中提到的一些细节,所以请在阅读我的问题时引用社论。
此外,请记住,我无意为 HackerRank 做广告;此外,我决不会将社论、问题描述或任何其他被 HackerRank 或关联方视为侵犯版权的 Material 的内容归功于自己。
实际问题:
我正在尝试理解这篇 problem 的社论.具体来说,我感到困惑的部分是以下代码:
...
for(int i=1;i<=k;i++) {
for(int j=0;j<8192;j++) {
mem[flag][j] = (mem[flag^1][j]*(1+(a[v[i-1]])/2))%mod + (mem[flag^1][j^v[i-1]]*((a[v[i-1]]+1)/2))%mod;
if(mem[flag][j]>=mod)
mem[flag][j]%=mod;
}
flag = flag^1;
}
社论指出“......使用这个属性,我们可以编写一个 O(N)
动态编程解决方案,其中 8192
常数因子使得 dp [i][j]
将存储可以由第一个元素组成的子集的计数,使得子集中元素的异或和为 j
。”
从代码看来,mem
本质上是 dp
,只是我无法理解 flag
的功能 - - 什么是 flag
?另外,我得到 1 + (a[v[i - 1]])/2
对应于 [0, a[v[i - 1]]] 和 (a[v[i - 1]] + 1)/2
对应于同一区间内的赔率数,但我看不出它与所有事物有何关系。
预先感谢您的努力。
最佳答案
这是使用动态编程时减少内存使用的标准方法。
这个想法是,通常 DP 数组的每一行只依赖于前一行。在这种情况下,您可以只使用数组的 2 行,而不是存储整个 2d DP[i][j] 数组。
换句话说,如果 i 是偶数,DP[i][j] 存储在 mem[0][j] 中,如果 i 是奇数,则存储在 mem[1][j] 中。 mem 数组被多次重复使用,每次迭代后保存完整 DP 数组的最新两行。
假设某个值 v 有 5 个副本。有 1+5/2 种方法可以使 0 异或(取 0,2 或 4 个副本)。有 (1+5)/2 种方法可以对 v 进行异或运算(取 1,3 或 5 个副本)。
因此,要生成新值 j,我们可以从 j 开始并添加 v 的 0,2 或 4 个副本,或者从 j^v 开始并添加 1,3 或 5 个副本。
关于algorithm - 了解 Prime XOR 的社论 - HackerRank,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44958697/
这个问题在这里已经有了答案: C - determine if a number is prime (12 个答案) 关闭 4 年前。 这是 C 程序。这是我的code在下面。我用了nano在终端。
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
和17一样,是质数,反过来,71也是质数。 我们设法得到了这段代码,但我们无法完成它。 #include main() { int i = 10, j, c, sum, b, x, d, e
好像is-prime和 .is-prime区别对待他们的论点: > is-prime('11') True > '11'.is-prime No such method 'is-prime' for
我正在尝试收集有关素数的一些统计数据,其中包括数字 (prime-1)/2 的因数分布。我知道有统一选择数的因子大小的通用公式,但我还没有看到任何关于小于一个素数的因子分布的信息。 我编写了一个程序,
BigInteger的JavaDoc让我感觉很不安全,例如下面的构造函数说: BigInteger(int bitLength, int certainty, Random rnd) Construc
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我需要将蓝牙模块连接到A-Star 32U4 Prime SV microSD,但无法使其工作。作为背景,我有一个Pololu双G2大功率电机驱动器24v18盾牌Arduino连接到它。。该项目是一个
我需要将蓝牙模块连接到A-Star 32U4 Prime SV microSD,但无法使其工作。作为背景,我有一个Pololu双G2大功率电机驱动器24v18盾牌Arduino连接到它。。该项目是一个
一 构建后的图 二 实现 package graph.prim; import java.util.Scanner; public class Prim { static final in
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我需要编写一个程序来输入一个数字并以以下形式输出其阶乘的质因数分解: 4!=(2^3)*(3^1) 5!=(2^3)*(3^1)*(5^1) 问题是我仍然不知道如何得到那个结果。 显然,括号中的每个第
我目前正在做一个项目,我需要一种有效的方法来计算素数。我使用了sieve of Eratosthenes,但是我一直在搜索,发现sieve of Atkin是一种更有效的方法。我发现很难找到对此方法的
我想找到总和为给定值的最小素数集,例如9 = 7 + 2(不是 3+3+3)。 我已经使用 sieve of eratosthens 生成了一个素数数组 我按降序遍历数组,以获得数组中小于或等于给定数
我正在学习 Real World Haskell(我在第 4 章),为了进行一些课外练习,我创建了以下程序来计算第 n 个素数。 import System.Environment isPrime p
我试图发现大数分解的复杂性。 哪一个是最佳算法,哪一个是找到数字的素因数的复杂性?假设数字的长度为n。 最佳答案 用于分解大于100个数字的整数的最知名算法是General number field
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Generating the partitions of a number Prime number sum
让我们看看我们想要找到 1 到 1000 之间的所有数字,这些数字表示为两个素数之和。例如 8 = 3+5, 24 = 13+11 现在这可以通过迭代 1 到 1000 之间的素数列表在 O(n^2)
我学会了一种叫做“线性筛”的算法https://cp-algorithms.com/algebra/prime-sieve-linear.html能够在线性时间内得到所有小于 N 的素数。 这个算法有
我正在学习 Idris,作为个人练习,我想实现一个 Primes类型,由所有素数组成。 在 idris 中是否有一种方法可以从一个类型和一个属性开始定义一个新类型,它将选择该属性为真的起始类型的所有元
我是一名优秀的程序员,十分优秀!