动态规划解决跳水板问题

跳水板问题

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。

返回的长度需要从小到大排列。

示例 1

输入: shorter = 1 longer = 2 k = 3
输出: [3,4,5,6]
解释: 可以使用 3 次shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/diving-board-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

首先,若k=0,输出空列表,此题无意义;
其次,若shorter=longer,则只需要任意选k块木板即可,那么木板可能的长度只有一种情况,即kshorter或klonger;
第三,若shorter!=longer且k=1,那么有两种选法,一种是选shorter,一种是选longer;

如果前k-1块板已选好,长度为boardlength(k-1),那么最后一块板面临两种选择:
一种是选shorter,boardlength(k)=boardlength(k-1)+shorter;
一种是选longer,boardlength(k)=boardlength(k-1)+longer;

两种方案相差longer-shorter长度,由于k块木板可能的解决方案有k+1中,那么如果第k个方案选择的是shorter,那么第k+1个方案可以在第k个的基础上加上longer-shorter就能算出新的可能长度。由此可得:
递推方程为:f(k)=f(k-1)+longer-shorter
边界条件为:f(0)=k*shorter

class Solution(object):
    def divingBoard(self, shorter, longer, k):
        """
        :type shorter: int
        :type longer: int
        :type k: int
        :rtype: List[int]
        """
        if k==0:
            return []
        if shorter==longer:
            return [shorter*k]
        boardlenth=[0]*(k+1)
        boardlenth[0]=k*shorter
        for i in range(1,k+1):
            boardlenth[i]=boardlenth[i-1]-shorter+longer
        return boardlenth
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言跳水比赛评分系统是一项功能丰富的软件,可以帮助跳水比赛的裁判快速准确地对选手进行评分。该系统可以接受输入所有选手的比赛成绩,并计算每个选手的最终分数,允许裁判对选手进行评分,并最终确定赢家。 该系统的核心功能是评分。在跳水比赛中,评分是非常重要的。评分包括难度系数、技术难度、跳水动作协调性、落水动作等方面。这些评分都通过语言C编写的公式进行计算。评分公式需要有效地处理输入的数据,这需要编写高效的C语言代码。 这个系统还需要一个用户友好的界面。跳水比赛评分系统的用户界面应该简洁明了,裁判员可以使用键盘输入选手的分数,或者使用鼠标进行选择和评分。同时,系统应该能够显示跳水动作以便裁判可以在良好的视觉场景中观察选手。 最后,该系统还需要检查其输入和输出数据的正确性。系统必须防止错误数据的录入或误报。 总之,C语言跳水比赛评分系统的开发需要高效的算法、清晰的用户界面,以及正确的输入输出数据的处理方式。如果开发工作得到很好地执行,该系统能够迅速有效地计算出选手的评分,减轻裁判员的负担,提高比赛的公正度。 ### 回答2: 作为一个C语言程序员,我将为您介绍一种跳水比赛评分系统的实现方法。为了方便观众和裁判员的观察和评分,该系统可视化展示参赛选手的跳水动作及其得分。 首先,我们需要定义参赛选手的跳水动作和规则,例如跳水难度系数、入水姿势等。然后,我们可以设计一个图形界面,将跳水动作的规则以及实际跳水动作展示给观众和裁判员。 参赛选手跳水之后,系统会自动记录其跳水动作的得分。当参赛选手完成跳水后,裁判员会对其跳水动作进行评分,然后将得分输入系统中。如果多名裁判给出的评分不一致,系统将根据规则去掉最高和最低分,取中间值作为参赛选手的得分。 最后,系统会计算所有参赛选手的总得分,并按照得分进行排名。我们还可以在系统中添加数据存储功能,将每次比赛的结果和记录进行保存和比对,以供后续比赛和评估使用。 总之,C语言跳水比赛评分系统可以帮助裁判员和观众更好地观察和评分跳水比赛,为比赛的公正和透明提供保障。同时,该系统还可以对比赛结果进行记录和分析,为跳水运动员的提高提供参考。 ### 回答3: C语言是一种广泛应用于实际编程领域的编程语言,其结构化和可移植性特点让其备受青睐。而跳水比赛评分系统是一种针对跳水比赛的评分系统,通过对选手的每个动作进行打分,最终评选出获胜者。 在C语言跳水比赛评分系统的设计中,需要考虑多个因素。首先需要建立一套标准的打分规则,规定每个动作的难度系数和标准分值。其次需要设计程序对选手的每个动作进行录入和保存,以便后续计算总分和排名。还需要设计计算程序,对选手的每个动作进行打分,并结合难度系数和标准分值,计算出该动作的得分。最后,需要设计程序根据所有动作得分的总和,计算选手的总分,以及进行排名和宣布获胜者。 在实现上述功能的过程中,还需要注意多个细节问题,如程序中数值的精确性、录入数据时的格式和异常情况处理等。总之,只有在所有细节和因素都被考虑到并正确处理之后,才能实现一个完善的C语言跳水比赛评分系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值