Python |石子游戏的最大得分

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。


引言

力扣(LeetCode),未来不止于此!


问题描述

你正在玩一个单人游戏,面前放置着大小分别为 abc的三堆石子。

每回合你都要从两个不同的非空堆 中取出一颗石子,并在得分上加 1 分。当存在两个或更多的空堆时,游戏停止。

给你三个整数a、bc,返回可以得到的最大分数 。

示例 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的情况时,它的得分等于a+b,后面实例2中第二次取石子时a+b也等于c,那么就可以得出规律,当出现a+b=c时,得分就等于a+b,其中的a,b不是固定,但是c肯定为三个数字中的最大数值,那么就可以通过三个数值的大小数值去进行解题。当a+b<=c时,返回的数值为a+b




实习编辑:李欣容

稿件来源:深度学习与文旅应用实验室(DLETA)

本文分享自微信公众号 - 算法与编程之美(algo_coding)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章