开发者社区> 问答> 正文

遇到一个求权值最小和问题,求解答。

Tom 有一天在玩棋子,这些棋子都不是普通的棋子。现在有 n 个棋子排成一排(2<=n<=18),每个棋子都有它们自己的权值 ai(0<=ai<=1e9),现在 Tom 每次选择连续的三枚棋子,然后中间的那枚棋子会消失,而它左右两边的棋子会分别加上它的权值,问最后只剩下两枚棋子的时候,这两枚棋子的权值的最小的和为多少?输入棋子个数 n 和一个数组 a,a[i] 表示每个棋子的权值。输出一个数,表示最终剩下的两枚棋子的权值的最小的和。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:59:53 481 0
1 条回答
写回答
取消 提交回答
  • 因为我们每选择一次,消失的数对左右都有影响,而且也会被挑选的顺序影响,所以需要去考虑每个棋子的贡献。枚举一段区间最后选的棋子,然后将其分为两段区间,设该段区间的左端点最终的贡献为 x,右端点最终的贡献为 y,那么在只剩最后选的数,左端点,右端点三个点时,我们选择最后的那个点,那么最后那个数最终的贡献就是 x+y 次了,然后根据这个思路已知分治下取就好了。dfs(l,r,x,y) 表示左端点、右端点、左端点的贡献、右端点的贡献的区间合并成两个数的最小和。 因此输入:4 [1,2,3,4] 输出:17

    2021-12-23 18:49:52
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载