分享

Python |石子游戏的最大得分

 算法与编程之美 2021-02-23

引言

力扣(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)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多