我有点问题。我正在向ArrayList
添加数字,例如156,340(当它是TransferIn
或Buy
时)等等,然后我删除它们就像156,340一样(当它是{{1}时},TransferOut
)。以下解决方案适用于此而没有问题。我遇到的问题是,对于一些旧数据,员工输入的金额是1500而不是500 + 400 + 100 + 500。我如何更改它,以便当有Sell / TransferOut并且ArrayList中没有匹配时,它应该尝试从该ArrayList添加多个项目并找到组合成聚合的元素。
Sell
答案 0 :(得分:4)
答案 1 :(得分:3)
这是背包问题的变体,称为subset sum problem。检查我的答案here以获取多种解决方案。如果使用动态编程方法,要获取需要删除的实际项目,只需保留第二个数组,告诉您为获得某个总和而添加的最后一个元素是什么,然后您可以使用它来查找解决方案。如果你不能让它发挥作用,请回发。如果你有很多数字,我建议随机算法,它更容易实现,更多的内存和时间效率(通常)。