牛客刷题-动态规划

下面的第四题这道题困扰了我一个下午,终于看了别人代码理解了,首先声明,针对这个题目其实可以有其他解法,而不仅仅是利用动态规划,可以同样适用霍夫曼编码的思路来进行,每整一次进行一次数据的整合,形成一个新的数组,同时维护一个int类型的数字用于记录所消耗的能量,能量记录方式可以按照整合之后的数字进行记录,每整合一次则相加一次,可以实现一个简单的求和。

这道题官方给出的思路是利用动态规划进行解题,这里再次回顾一下动态规划题目所给出的提示:涉及到分配,题目最后会问最大或者最小,需要求出最优解。于是这类题目首先就需要想到可以使用暴力递归的形式来进行求解,原因在于如果将输入的所有长度的数据都求出最优解,则整个问题的最优解一定包含在其中。因此可以采用暴力递归的形式求出每一种数组的最优解的数值,然后进行相应的转换,从而求出整个最优解。

针对这样的题目之前已经给出了相应的文章来讲解,但是由于自己又忘掉,所以重新整理一遍。

  1. 牛能和牛可乐的礼物

    这道题目由于是求礼物价值和的最小差值,很明显如果平分的话是最小的情况,所以可以先求出来平均值,再将输入的数字进行求解最靠近平均值的数字,于是就可以用这个数字来求解最小差值。求解最靠近该字符的方法可以使用遍历的形式进行,每一个字符都可以采用是否进行相加来计算出所有可能的情况,然后在其中筛选出最符合的那个。官方给出的算法是形成一个从0到平均值的一维数组,如果可以到达该点则将数值设为1,然后从平均值向左寻找第一个1,就是可以到达的最近的值。同样明确好起始位置,终点位置以及中间过程还有结束标志,就可以完成一个动态规划题目的代码编写。

  2. 牛妹的礼物
    这道题是我们平时做题抽象完之后的结果——二维矩阵,从(1,1)位置走向右下角位置。同时当前状态和前几个状态相关,于是又是一道动态规划和暴力递归的题目。
    最终的位置依赖于到达其上方的最小和和到达其左方的最小和以及斜上方的最小和。从而就可以形成动态规划。

  3. 牛妹的面试
    这道题找出最长的凸子序列,我自己做这道题理解错了意思,导致只通过了15%,这道题求山峰序列,同时是子序列,子序列可以是序列中抽出的序列,序列元素间不一定连续排列,因此这道题就可以转化成两边依次求出最长上升序列,求解出之后进行数据相加,再找出最大值即可。
    具体可以参考最长升序子序列

  4. 牛妹打怪兽
    打怪兽这道题目跟霍夫曼编码比较像,但是又不一样。这道题由于也是求最小的值,因此可以设定到i时的最优情况,到j位置上时为之前的所有值到当前位置上的值进行相应的计算的结果中最小的那个,依次保存在数组中,最后求解的就是整个的最短能量。
    动态规划利用了同样的道理,循环找到每个位置上的最短能量以及该位置到当前位置上所需要消耗的能量总和,求出其中最小的那个,作为当前位置上的最少能量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值