c语言中一元钱币的算法,c – 确定硬币组合的算法

这似乎有点像分区,除了你在1:50中不使用所有的整数.它也似乎类似于bin包装问题,略有不同:

其实在考虑之后,是an ILP,NP-hard.

我建议一些动态的编程appyroach.基本上,您将定义一个值“余数”,并将其设置为您的目标(例如50).然后,在每一步,您将执行以下操作:

找出可以适合剩下的最大的硬币

>考虑如果你(A)包括硬币或(B)不包括那个硬币会发生什么.

>对于每个场景,递归.

所以如果剩余的是50,最大的硬币是25和10,你会分两种情况:

1. Remainder = 25,Coinset = 1x25

2. Remainder = 50,Coinset = 0x25

下一步(每个分支)可能如下所示:

1-1. Remainder = 0,Coinset = 2x25 Logged

1-2. Remainder = 25,Coinset = 1x25

2-1. Remainder = 40,Coinset = 0x25,1x10

2-2. Remainder = 50,0x10

每个分支将分成两个分支,除非:

>剩下的是0(在这种情况下你会记录它)>剩下的是小于最小的硬币(在这种情况下你会丢弃它)>没有更多的硬币留下(在这种情况下,你会丢弃它,因为剩余!= 0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值