动态规划

Posted nevergiveup0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划相关的知识,希望对你有一定的参考价值。

01背包

package 背包;

public class 背包 

    public static void main(String[] args) 
        // TODO Auto-generated method stub
        int[] w= 3,5,2,6,4;
        int[] val= 4,4,3,5,3;
        int m=12;//容量
        int n=val.length;
        int[] f=new int[m+1];//价值
        //不必装满,初始化为0
        for(int i=0;i<f.length;i++) 
            f[i]=0;
        
        for(int i=0;i<n;i++) 
            for(int j=m;j>=w[i];j--) 
                f[j]=Math.max(f[j], f[j-w[i]]+val[i]);
            
        
        System.out.println(f[m]);
    

 

 

完全背包

多重背包

混合背包

二维费用背包

分组背包

背包问题求方案数

求背包问题方案

有依赖的背包问题

跳台阶

f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5,

f(n) = f(n-1) + f(n-2)

public class Solution 
    public int JumpFloor(int target) 
       if(target==0)return 0;
        if(target==1)return 1;
        if(target==2)return 2;
        int pre=1;
        int cur=2;
        int next=0;
        for(int i=3;i<=target;i++)
            next=pre+cur;
            pre=cur;
            cur=next;
        
        return next;
    

矩形覆盖

f(n) = f(n-1) + f(n-2)

public class Solution 
    public int RectCover(int target) 
        int sum=0;
        int a=1;
        int b=2;
        if(target==1)
            return 1;
        if(target==2)
            return 2;
        for(int i=3;i<=target;i++)
        
            sum=a+b;
            a=b;
            b=sum;
        
        //若用递归方法:横着放 target-1 种方法 竖着放 target-2方法
        return sum;
    
    

 

变态跳台阶

f(1) = 1

f(2) = f(2-1) + f(2-2)         //f(2-2) 表示2阶一次跳2阶的次数。

f(3) = f(3-1) + f(3-2) + f(3-3) 

...

f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n) 

             | 1       ,(n=0 ) 

f(n) =     | 1       ,(n=1 )

              | 2*f(n-1),(n>=2)
public class Solution 
    public int JumpFloorII(int target) 
        if (target==0)
            return 0;
        if(target==1)return 1;
        if(target==2)return 2;
        int pre=2;
        int cur=0;
       // int next=0;
        for(int i=3;i<=target;i++)
            cur=2*pre;
            pre=cur;
        
        return cur;
    

 

 

以上是关于动态规划的主要内容,如果未能解决你的问题,请参考以下文章

算法动态规划 ② ( 动态规划四要素 | 动态规划状态 State | 动态规划初始化 Initialize | 动态规划方程 Function | 动态规划答案 Answer )

算法动态规划 ② ( 动态规划四要素 | 动态规划状态 State | 动态规划初始化 Initialize | 动态规划方程 Function | 动态规划答案 Answer )

算法动态规划 ① ( 动态规划简介 | 自底向上的动态规划示例 | 自顶向下的动态规划示例 )

算法动态规划 ① ( 动态规划简介 | 自底向上的动态规划示例 | 自顶向下的动态规划示例 )

算法动态规划 ③ ( LeetCode 62.不同路径 | 问题分析 | 自顶向下的动态规划 | 自底向上的动态规划 )

算法动态规划 ③ ( LeetCode 62.不同路径 | 问题分析 | 自顶向下的动态规划 | 自底向上的动态规划 )