Algorithm 可被前一个数之和创建的另一个数整除的最大数

Algorithm 可被前一个数之和创建的另一个数整除的最大数,algorithm,concatenation,dynamic-programming,Algorithm,Concatenation,Dynamic Programming,有给定的编号1、2、…、b-1。每一个数字都可以使用a[1]、a[2]、..、a[b-1]次 从它们中,最大可能的数字(来自给定的数据)必须串联起来,而其数字总和(部分数字)必须可以被b整除。此数字的“数字”可以是大于2的任何基数。 因此,基本上,必须通过连接数字1…b-1,创建最大数量的基b,每次最多可达到a[1]…a[b-1],而所有使用的部分数/位数之和必须可被b整除 例如: 有5次1,10次2,4次3和2次4。如上所述,它们必须连接可被b(此处5)整除的最大数字。 他们会给出: 4433

有给定的编号
1、2、…、b-1
。每一个数字都可以使用
a[1]、a[2]、..、a[b-1]

从它们中,最大可能的数字(来自给定的数据)必须串联起来,而其数字总和(部分数字)必须可以被
b
整除。此数字的“数字”可以是大于2的任何基数。
因此,基本上,必须通过连接数字
1…b-1
,创建最大数量的基
b
,每次最多可达到
a[1]…a[b-1]
,而所有使用的部分数/位数之和必须可被
b
整除

例如:
有5次
1
,10次
2
,4次
3
和2次
4
。如上所述,它们必须连接可被
b
(此处
5
)整除的最大数字。
他们会给出:
44333322111

从最大值到最小值的串联给出所需的数字,因为它们的总和可以被5整除。
对于1次
1
它是:
0

因为1不能被2整除,所以不应该使用数字

算法或类似的问题是什么?如何接近它

首先,我们可以简单地从最大到最小排列数字,因此串联的数字自然是最大的。然后,我们必须取这些数字中的最小值,这样它们的和就可以被
b
整除。如果可以对这些数字进行不同的组合,但数量相同,则应选择其中最大的数字最小的数字(或第二大的数字,依此类推)。
例如:
如果可以采用
(3,3,2)
(4,2,2)
的组合,则应从数字中删除第一个

这看起来真的像是兑换问题,但由于不同面额的硬币数量有限,最后,我们必须有组合,而不仅仅是最小数量的硬币。另外,在动态数组中,2个不同长度的组合(如<代码> 332 < /代码>和<代码> 442 >代码>)在动态数组的中间不能很容易地被选择,因为在下一个步骤中它们可以给出很多不同的值。