【发布时间】:2023-03-20 06:19:01
【问题描述】:
假设给定一个数字 k 和一个具有一定权重的对象数组。现在,您的任务是找出可以放入两个袋子中的最少物品数量,使每个袋子的重量至少为 k。
您只能将物体整体拿走,不允许破坏。此外,如果一个物品放在一个袋子里,它就不能放入另一个袋子里。
这个问题对我来说似乎很简单。当您只需要装满一个袋子时,我也做过类似的问题。我使用的想法是你访问每个对象问自己如果我把它放在袋子里会怎样,如果我不放呢?您递归地执行此操作,直到达到您想要的重量或您没有更多的对象。调用递归函数时取最小值。
但是,我无法理解如何跟踪包 1 中用完的所有对象,因此我不包含在包 2 中。
很少的测试用例
- 所需重量 (k) = 4
对象数 (N) = 1
[10]
输出:-1(不可能) - 所需重量 (k) = 2
对象数 (N) = 3
[2,2,2]
输出:2
【问题讨论】:
-
这里真正考的是对计算机科学和算法的基础知识和理解。如果您不知道答案,那么实现这一点的裸代码转储将不会真正帮助您理解任何东西或学习任何东西。相反,这里的正确答案应该是去学习实现这一点所需的计算机科学和算法的相关领域。不幸的是,stackoverflow.com 不能替代 good C++ and computer science algorithms textbook。
-
我没有要求任何代码转储或复制粘贴解决方案。令我困惑的事情是将对象包含在一个中,而将它们排除在另一个中。给出一个简单的方向将是有帮助和感激的。另外,我认为这并不像最初看起来那么简单。但我知道什么?@SamVarshavchik
-
您的困惑的确切性质是什么?同样,这只不过是一种算法。如果您不确定“如何跟踪所有对象”或“将对象包含在一个对象中并排除在另一个对象中”,那么您正在寻找解释各种算法的教科书和其他资源。 C++ 库本身提供了许多不同的容器,它们存在的唯一原因是“跟踪它们所包含的对象”。不幸的是,Stackoverflow 不是 C++ 教程网站或教科书的替代品,而是针对特定 问题的。您的具体问题是什么?
-
我解决了这个问题将很快添加我的解决方案。不知道算法的确切名称是什么。但我认为这是简单的逻辑。@SamVarshavchik
标签: c++ recursion dynamic-programming