1753. 移除石子的最大得分#
问题描述#
你正在玩一个单人游戏,面前放置着大小分别为
a
、b
和c
的 三堆 石子。每回合你都要从两个 不同的非空堆 中取出一颗石子,并在得分上加
1
分。当存在 两个或更多 的空堆时,游戏停止。给你三个整数
a
、b
和c
,返回可以得到的 最大分数 。示例 1:
输入:a = 2, b = 4, c = 6 输出:6 解释:石子起始状态是 (2, 4, 6) ,最优的一组操作是: - 从第一和第三堆取,石子状态现在是 (1, 4, 5) - 从第一和第三堆取,石子状态现在是 (0, 4, 4) - 从第二和第三堆取,石子状态现在是 (0, 3, 3) - 从第二和第三堆取,石子状态现在是 (0, 2, 2) - 从第二和第三堆取,石子状态现在是 (0, 1, 1) - 从第二和第三堆取,石子状态现在是 (0, 0, 0) 总分:6 分 。
示例 2:
输入:a = 4, b = 4, c = 6 输出:7 解释:石子起始状态是 (4, 4, 6) ,最优的一组操作是: - 从第一和第二堆取,石子状态现在是 (3, 3, 6) - 从第一和第三堆取,石子状态现在是 (2, 3, 5) - 从第一和第三堆取,石子状态现在是 (1, 3, 4) - 从第一和第三堆取,石子状态现在是 (0, 3, 3) - 从第二和第三堆取,石子状态现在是 (0, 2, 2) - 从第二和第三堆取,石子状态现在是 (0, 1, 1) - 从第二和第三堆取,石子状态现在是 (0, 0, 0) 总分:7 分 。
示例 3:
输入:a = 1, b = 8, c = 8 输出:8 解释:最优的一组操作是连续从第二和第三堆取 8 回合,直到将它们取空。 注意,由于第二和第三堆已经空了,游戏结束,不能继续从第一堆中取石子。
提示:
1 <= a, b, c <= 105
解题思路#
方法一:模拟#
显然每次同时从石子数最多的两堆中取能够得到最大分数。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
方法二:数学推导#
最小的一堆肯定最先消耗完,然后再看剩下的两堆中的最小值越大越好。
假设 \(a\le b\le c\),然后题目的意思就是把 \(a\) 分配到 \(b,c\) 两堆后能够得到的最大值。
如果 \(a+b\lt c\),则是 \(a+b\)。
否则是 \(c + (a - (c - b)) / 2=(a+b+c)/2\)。
1 2 3 4 |
|
1 2 3 4 5 6 7 |
|