- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我写了一个生成子集总和的程序,它可能会用在这个问题中,它指出:
Suppose, you have 3 $1-coins, 2 $2-coins, 3 $5-coins, 1 $10-coin, there are 4 ways to obtain $10 from those coins. If there are n1 $X1 coins, n2 $X2 coins.... nm $Xm coins, how many ways can we obtain $X from these limited number of coins?
如果我们创建一组 { X1, X1..... X1, X2, X2....... X2, ..., ..., ...... ....., Xm, Xm... Xm},然后对其进行子集求和,肯定可以得到$X的结果。但是我找不到使用集合 {n1, n2, n3.... nm} , {X1, X2, X3.... Xm} 的方法。一个 friend 告诉我这是背包问题的变体,但我不确定,如何。
这是我写的部分代码:
ways[0]=1, mylim=0;
for(i=0;i<count;i++){
if(mylim+coins[i]<=LIMIT) mylim+=coins[i];
else mylim=LIMIT;
for(j=mylim; j>=coins[i];j--){
ways[j]=(ways[j]+ways[j-coins[i]])%MOD;
}
}
如果您能详细解释一下,我会非常高兴。
编辑:这个问题更适合计算机科学的stackexchange,但由于这是我的一个老问题,我宁愿在这里编辑它。
这个问题可以用包含排除原则来解决,当我们有固定的硬币值但每个查询的每个硬币的数量都不同时,它会派上用场。
假设,ways[v] 是用$x1、$x2 制作$v 的方法, .. $xm,每个都根据需要使用多次。现在,如果我们只使用 n1 个 $x1,我们必须使用至少 (n1 + 1) 个数来减去配置$x1(实际上是方式[v - (n1 + 1)x1])。此外,如果我们只使用 n2 个 $x2,我们必须减去 ways[v - (n2 + 1) x2] 以及等等。
现在,我们两次减去至少 (n1 + 1) $x1 和 (n2 + 1) $x2 被使用,因此我们需要添加方式[v -(n1 + 1)x1 - (n2 + 1)x2] 等。
特别是,如果,
N = 尽可能多地使用所有硬币的配置集,
Ai = 一组配置,其中至少使用了 ni + 1 个 $xi,对于 1 <= i <= m,然后
我们求的结果= |N| - |A1| - |A2| .. - |是| + |A1 和A2| + |A1 和A3| + ... - |A1 和A2 和A3| .....
计算无限硬币配置数量的代码实际上更简单:
ways[0]=1;
for( int i = 0 ; i < count ; i++){
for( int j = coins[i] ; j < ways.size() ; j++ ){
ways[j] += ways[j-coins[i]];
}
}
最佳答案
假设您所有的 ni
都是 1
。
令 ways[j] = 获得和 j 的方式数
。
您可以这样计算(这就是您正在做的,但我不知道您为什么将变量命名为 primes
)。
ways[0] = 1
for i = 1 to m do
for j = myLim downto X[i] do
ways[j] += ways[j - X[i]];
这意味着您只能使用每枚值(value) Xi
的硬币一次。您可以添加另一个循环以使用它至少一次,但最多 ni
次:
ways[0] = 1
for i = 1 to m do
for times = 1 to n[i] do // use Xi one time, then two times, then three, ..., then ni
for j = myLim downto times*X[i] do
ways[j] += ways[j - times*X[i]];
您仍然可以应用您的模数并计算您的限制,为了简单起见,我将它们省略了。
关于硬币数量有限的硬币找零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198210/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!