- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是一道编程题。
题目如下:
将给出一个数字数组以及我们要除以的数字 k。我们必须从该数组中选择元素,使得这些元素的总和可以被 k 整除。这些元素的总和应尽可能大。
输入:
第一行n,表示元素个数。
在下一行给出了 n 个数字。
在下一行给出了 k,我们必须除以它。
输出:
通过从该数组 s.t. 中选择元素来获得尽可能大的总和。总和可以被 k 整除。
示例输入:
5
1 6 2 9 5
8
示例输出:
16
请注意,16 可以通过不止一种数字组合获得,但我们这里只关心最大和。
我提出的解决方案:
我遍历数组并在数组 b 中维护给定输入数组的累积和,例如:
b=[1 7 9 18 23]
然后将数组b中的数字乘以k取模并将其存储到
c=[1 7 1 2 7]
现在 c 中具有相同值的数字,即索引 0 和索引 2;索引 1 和索引 4。现在我有了所有的解决方案,答案是
max(b[2]-b[0],b[4]-b[1])
如果三个索引在 c 中具有相同的值,即在这种情况下
c=[1 2 3 1 1 2]
答案是
max(b[4]-b[0],b[5]-b[1])
基本上是用最右边出现的数字减去最左边出现的数字。
我的解决方案仅在有连续元素 s.t 时才有效。元素之和可以被 k 整除。期待正确解决方案的描述
最佳答案
我认为您的解决方案不正确,因为您只考虑连续的数字。例如,如果输入是
4
1 6 2 9
8
答案仍然是 16 (=1+6+9)。我不确定您的解决方案是否可以给出这个答案。
要有效解决此问题,请尝试动态规划。我会省略细节,但会指出要点。
假设数字在数组 a[i]
中,其中 i
是从 1
到 n
。
令 f(i,j)
表示从 a[1]
到 a[i]
中选择数字可以获得的最大总和>(即 a[1]、a[2]、...、a[i]
)并且求和模 k
是 j
.
考虑f(i,j)
,显然我们有两个选择:(1)在求和中包含a[i]
; (2) 不包含a[i]
。因此 f(i,j) = max{ f(i-1,x) + a[i], f(i-1,j) }
其中 x + a[i] == j (mod k)
。对于所有 j
f(0,j) = 0
为了实现这个算法,基本框架如下。
for (j = 0; j < k; j++) f[0][j] = 0;
for (i = 1; i <= n; i++)
for (j = 0; j < k; j++) {
x = (j + k - a[i]%k) % k;
f[i][j] = max(f[i-1][x], f[i-1][j]);
}
为了节省内存,也可以使用大小为[2][k]
的数组代替[n][k]
:
for (j = 0; j < k; j++) f[0][j] = 0;
for (i = 1; i <= n; i++)
for (j = 0; j < k; j++) {
x = (j + k - a[i]%k) % k;
f[i%2][j] = max(f[(i-1)%2][x], f[(i-1)%2][j]);
}
您还可以使用 i&1
(和 (i-1)&1
)来加速 2
的模运算。
关于动态规划的进一步引用:
关于algorithm - 查找可被给定数字整除的数组元素的最大总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511885/
这就是我到目前为止所拥有的;我必须使用这个主要方法。 public class HW4 { public static boolean isDivisibleByThree(String n)
这个问题在这里已经有了答案: Is floating point math broken? (31 个答案) 关闭 7 年前。 我不明白为什么 % 会这样: >>> 5 % 0.5 == 0 Tru
目录 整除 整除的定义与基本性质 素数 素数的定义与基本性质
我正在编写一个 C 程序,要求用户输入密码并检查数字中的每个数字是否可以被 2 整除。例如,如果他们输入 123452,它会告诉用户这是错误的,因为 1, 2,3,5 不能被 2 整除。如果我输入 6
我有一些东西要读取一个文本文件,然后是一个像这样的函数文件 int Myiseven(int x) { int isOdd = 0; if (x % 2 == 1) {
我需要编写一个程序,在给定的数字范围内,程序需要找到数字之和能被3整除的数字。之后,它需要检查总和是否大于0,如果它能被4整除,并打印满足上述条件的数字。这是我尝试过的: include int m
我对 ffmpeg 有疑问。我想将图像序列格式化为视频。我为此使用以下命令: ffmpeg -framerate 24 -i image%04d.jpeg Project.mp4 -vf "pad=c
我把这个作业作为家庭作业,但我不知道该怎么做: Input is a string of the numbers 1, 2 and 3. You need to build a function th
这里我需要检查数字中的每个数字,因为范围应该被3整除,这意味着当我输入20和40时,代码需要验证20到40之间数字的每个数字,并且它应该显示 30,33,36,39 我试图做的是获取代码的最后一位数字
Given an array of integers and a number k, write a function that returns true if given array can be
如果用户输入从最高位到最低位的数字,如何检查二进制数是否可以整除 13? 位数可能非常大,因此将其转换为十进制然后检查其可整除性是没有意义的。 我已经以常规方式处理了它。位数最多为 10^5,因此在将
我正在解决这个问题,即我们给了数字 N,它可以很大,最多可以有 100000 个数字。 现在我想知道找到这些数字的最有效方法是什么,我认为在大数字中我最多需要删除 3 位数字才能被 3 整除。 我知道
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Check if a number is divisible by 3 如果一个二进制数的个数是偶数,它是否
我想知道二进制有没有除以3的整除法则 例如:在十进制中,如果数字和除以 3,则数字除以 3。例如:15 -> 1+5 = 6 -> 6 除以 3所以 15 除以 3。 要了解的重要一点是,我不是在寻找
这工作正常,但我想让它更漂亮 - 并容纳所有可被 4 整除的值: if i==4 || i==8 || i==12 || i==16 || i==20 || i==24 || i==28 || i==
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
如何判断一个变量是否可以被 2 整除?此外,如果是,我需要执行一个功能;如果不是,我需要执行另一个功能。 最佳答案 使用模数: // Will evaluate to true if the vari
处理器中的除法需要很多时间,所以我想问一下如何以最快的方式检查数字是否可以被其他数字整除,在我的情况下,我需要检查数字是否可以被 15 整除。 我也一直在浏览网页并发现 有趣 方法来检查数字是否可以被
我一直在学习可变参数模板,在 this excellent blog post 的帮助下,我已经设法编写了一个函数模板 even_number_of_args 它返回它接收到的参数的数量是否可以被 2
我的一个 friend 在对一家公司进行在线评估时遇到了这个问题,并向我提出了这个问题。 An array of integers is given and we have to (possibly)
我是一名优秀的程序员,十分优秀!