java - Java 递归回溯
问题描述
我学习计算机科学,目前正在练习回溯,因为我非常不擅长它。我在网上找到了这个练习:
你在卖苹果。这是您的苹果的当前价格表:
数量 1 2 3 4 5 6 7 8 价格 1 5 8 9 10 17 17 20
因此,如果您一次销售 8 个苹果,您将获得 20 美元。如果您先卖 6,然后再卖 2,您将获得 22 美元。尝试找到最大的利润。这是方法,您应该使用:
public static long sellApples(int count, long[] prices) {
}
现在我想了 5 个小时,但我无法找到一个好的解决方案。有人来挑战一下吗?
解决方案
我不是这方面的专家,所以我对我说的话持保留态度。
在该方法中,您需要将计数拆分为多个部分,例如8 => 3, 5
. 您需要再次调用此方法,这两个值都为count
. 这是更明显的部分。
棘手的部分是您需要承认将计数分成 2 部分就足够了。我的意思是您不需要尝试使用1,2,5
值调用该方法,因为如果您只是使用 调用它3,5
,那么下一次迭代可以拆分3
为1,2
.
更明显的事实是,如果您尝试过,3,5
则无需尝试5,3
。
因此,如果您的输入是 8,那么您尝试8
, 1,7
, 2,6
,并比较结果3,5
,4,4
选择最大的一个。从您提供的方法存根中,我假设您不需要返回如何获得该结果,只需返回最大结果本身
推荐阅读
- mysql - mysql查询选择一个目标的所有目标和那些已经完成的目标
- r - 将阿拉伯语句子分成单词会导致具有不同功能的单词数量不同
- c - a 和 b 的 Main 成功交换
- php - SQL语句的PHP bindValue在函数内部不起作用
- python - 如何将 int32 张量转换为 float32
- python - 如果子节点有属性则选择following-sibling
- azure - 使用 GitLab 和 Azure Kubernetes 处理 CI
- firebase - 如何唯一标识flutter中的小部件?
- java - 如何在java中实现类似pdf渲染的web浏览器?
- reactjs - React 中的连续 requestAnimationFrame