zoukankan      html  css  js  c++  java
  • 动态规划3

     这个是上图的表达式

    一个动态规划问题,最重要的就是他的状态转移方程。

    递归实现

    记忆化搜索

    动态规划

    不同的状态,解法也是不同的

    视频里的状态转移有点过于复杂,我也想到了另一种方法,也AC了。

    也侧面反映了,状态转移方程的不同,可以一提多解。

    就是选第一个,和不选第一个,这样方程更简洁更好懂。

    public static int memo[];
    
        public static int robber(int[] nums,int begin){
    
            int len = nums.length;
            
            //这个递归要三个及三个元素以上才成立
            //别计算nums的长度。。。因为肯定是一样的
            
            //如果还有一个元素,begin是最后一个元素
            if(begin==len-1)
                return nums[begin];
    
            //begin,begin+1,两个元素
            if(begin==len-2){
                return nums[begin]>nums[begin+1]?nums[begin]:nums[begin+1];
            }
    
            if(begin>=len-2)
                return nums[begin];
    
            if(memo[begin]!=-1)
                return memo[begin];
    
            //选第一个和后面的
            int state1 = nums[begin]+robber(nums,begin+2);
            //不选第一个,直接选后面的
            int state2 = robber(nums,begin+1);
    
            if(state1>state2)
                memo[begin]=state1;
            else
                memo[begin]=state2;
    
            return memo[begin];
    
    
    
        }
    
        public int rob(int[] nums) {
    
            int len = nums.length;
            
            if (len==0)
                return 0;
            
            memo = new int [len];
            for(int i=0;i<len;i++)
                memo[i]=-1;
            
            return robber(nums,0);
            
    
    
        }

    还是犯了很多错误啊。。。。。

    213

    337

    309

  • 相关阅读:
    HashMap 常问的 9 个问题
    P1855 榨取kkksc03
    Codeforces Round #697 (Div. 3) A. Odd Divisor
    P1474 [USACO2.3]Money System / [USACO07OCT]Cow Cash G
    Codeforces Round #704 (Div. 2) D. Genius's Gambit
    P2800 又上锁妖塔
    P2066 机器分配
    P3399 丝绸之路
    P1351 [NOIP2014 提高组] 联合权值
    P4290 [HAOI2008]玩具取名
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9260348.html
Copyright © 2011-2022 走看看