穿越硬币数量有限的硬币

我编写了一个程序来生成可以在此任务中使用的子集金额::

假设你有 3 $1-coins, 2
$2-coins, 3 $5-coins, 1 $10-coin,
有 4 时尚得到 $10 的
这些硬币。 如果有 n1 $X1
硬币 n2 $X2 硬币 ... nm $Xm 硬币
我们可以获得多少种方式 $X 的
它是有限数量的硬币吗?

如果我们创造了很多 { X1, X1..... X1, X2, X2.......... X2, ..., ..., ............, 嗯,嗯...... Xm}, 然后,当然,我们可以实现它的子集的总和 $X.
但我找不到方法使用套装 {n1, n2, n3.... nm} , {X1, X2, X3.... Xm}.
我的朋友告诉我,这是一种问题背包,但我不知道该怎么做。

这是我写的部分代码 :


ways[0]=1, mylim=0;
for/i=0;i<count;i++ else="" for="" if="" j="" mylim="LIMIT;" mylim+="coins[i];" mylim+coins[i]<="LIMIT/" {="">=coins[i];j--/{
ways[j]=/ways[j]+ways[j-coins[i]]/%MOD;
}
}


如果你如此善良,我会非常好看,并更多地解释了一下。

EDIT

:
这个问题更适合 stackexchange for computer science, 但由于这是我的旧问题,我宁愿在这里编辑它。

可以使用原理来解决这个问题

不包括纳入

, 这很方便,

当我们有固定的硬币时,但每个硬币的金额随着每个请求而变化

.

认为

什么

方法[v] - 这种创造方式

$v



$x1

,

$x2

, ..

$xm

, 每个都根据需要使用。 现在,如果我们只使用 n1

数字

$x1

, 我们必须至少使用至少减去配置 / n1 + 1/ 数字 $x1 / 什么是实际的方式 [ v - /n1 + 1/x1 ] /. 而且 , 如果我们只使用 n2 数字 $x2, 我们还必须扣除方式 [ v - /n2 + 1/x2 ] 和




T. D。

现在我们两次至少减去了至少一个配置 /

n1

+ 1/

$x1

和 /

n2

+ 1/

$x2

, 因此,我们需要添加

方法

[

v -/n1 + 1/x1 - /n2 + 1/x2

] 等等。

特别是,如果

N

= 一组配置,所有硬币尽可能多地使用,

AI.

= 至少有一组配置

我们

+ 1 数字 $xi 用过的

为了 1 &lt;=

一世

&lt;=

m

, 然后

结果,我们努力 = |

N

| - |

A1

| - |

A2

| .. - |



| + |

A1和A2

| + |

A1 和 A3

| +

... - |

A1 和 A2



A3

| .....

计算具有无限数量硬币的配置数量的代码实际上更容易:


ways[0]=1;
for/ int i = 0 ; i &lt; count ; i++/{
for/ int j = coins[i] ; j &lt; ways.size// ; j++ /{
ways[j] += ways[j-coins[i]];
}
}


</count;i++>
已邀请:

快网

赞同来自:

假设你所有的
ni

-这是
1

.

让我们
ways[j] = number of ways of obtaining sum j

.

你可以计算它 /这就是你所做的,但我不知道为什么你打电话给我们的变量
primes

/.


ways[0] = 1
for i = 1 to m do
for j = myLim downto X[i] do
ways[j] += ways[j - X[i]];


这意味着您使用每个硬币故障。
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]];


您仍然可以应用您的模块并计算您的限制,我为简单留下了它们。

三叔

赞同来自:

任务称为 "The coin problem" 而且,如您所知,NP很难。

你可以了解一下。
http://mathworld.wolfram.com/CoinProblem.html

要回复问题请先登录注册