查看: 2604| 回复: 15
跳转到指定楼层
上一主题 下一主题
收起左侧

[动态规划] 请教一道算法题(答题加米)

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
一共两种operations,分别是加一、乘4.
求从1到数字N的最小operation次数,并且乘4的操作不能超过X次.谢谢!

上一篇:Moving zeros有思路可代码突然写不出来
下一篇:30个常见算法问题以及Follow-up
推荐
337845818 2019-9-25 10:42:47 | 只看该作者
全局:
dp[j, 0] = j
dp[j, k] = min(dp[j - 1, k], 1 + dp[j / 4, k - 1])

评分

参与人数 2大米 +3 收起 理由
gtiug111 + 2 很有用的信息!
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

推荐
QuantumDog 2019-9-25 08:54:39 | 只看该作者
全局:
改成/4和-1,从n变成1,那么能/4就/4,不能就-1减到能/4,/4用完了就一直减

评分

参与人数 1大米 +1 收起 理由
小水 + 1 一开始也是这么想的,老报错,可能没处理好.

查看全部评分

回复

使用道具 举报

推荐
 楼主| 小水 2019-10-3 07:33:41 | 只看该作者
全局:
联氢人 发表于 2019-10-3 05:22
准确来说是O(min(log(N), X))
因为如果X范围比较松的话,greedy倒推的下降速度是至多每四次操作N->N/4, ...

谢谢大神解答!方便帮我看一眼code写的对不对或者需要怎样优化吗?
class Solution {
    public int solution(int N, int x) {
     int ans = 0;
         while(N != 1){
                 if(N%4 == 0 && x >0 ){
                        N = N/4;
                        x--;
                        ans++;         
                 }
                 if(N%4 != 0 || x == 0){
                         N --;
                         ans++;
                 }           
         }
      return ans;
    }
  }
回复

使用道具 举报

全局:
感觉是用动态规划?

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
QuantumDog 2019-9-25 08:53:34 | 只看该作者
全局:
仔细想想,
第一,你可以把n想成2进制或者4进制,这样加1还是加1,x4变成shift2或shift1.
第二,如果倒过来想,就是/4和-1如何最快降为1,这样能整除的情况下必然优先/4,不能就只能-1.

所以似乎就是不断//4和%4的过程?

评分

参与人数 3大米 +6 收起 理由
jackxpeng + 2 很有用的信息!
14417335 + 3
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
 楼主| 小水 2019-9-25 10:17:23 | 只看该作者
全局:
不知道小帅 发表于 2019-9-25 07:09
感觉是用动态规划?

感觉动态转移方程不太容易想
回复

使用道具 举报

🔗
 楼主| 小水 2019-9-25 10:18:23 | 只看该作者
全局:
QuantumDog 发表于 2019-9-25 08:53
仔细想想,
第一,你可以把n想成2进制或者4进制,这样加1还是加1,x4变成shift2或shift1.
第二,如果倒过 ...

这个想法挺有意思的,你方便po一下pseudo-code吗
回复

使用道具 举报

🔗
Shen.TT 2019-9-26 04:01:50 | 只看该作者
全局:
这个题应该不是用DP的吧,速度差的有点多
Greedy比较好,尽量把乘4往后放。这个跟Knapsack problem 还不一样,两个操作是乘4和加一,所以greedy一定可以找到最优解

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
本帖最后由 联氢人 于 2019-9-27 06:53 编辑

感觉是greedy吧
倒推,当N%4!=0的时候必然是-1,当N%4==0的时候如果乘法次数还没到上线,反证法可得此处/4(相当于正向的*4)必然比做四次(或者4*a次,anyway)-1 要省总次数dp也不是不可以做,但是复杂度就是O(Nk)时间O(Nk)空间,同时greedy的话就是O(logN), 高下立判...

评分

参与人数 1大米 +1 收起 理由
小水 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
Judy_922 2019-9-27 07:09:03 | 只看该作者
全局:
直接贪心就可以吧。。。目标不被4整除在-1,很容易证明的

评分

参与人数 1大米 +1 收起 理由
小水 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表