动态规划的入门案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lijiaheng525/article/details/80939540

动态规划使用条件:原始最优解问题可以基于子问题的最优解求的,而且子问题被重复递归求解。

 特点:

    1 :具有最优子结构 

    2:  重叠子问题求解

钢条割据案例:

代码参考:

package com.ljh;

public class DongTai001 {

    //钢条割据问题
    public static void main(String args[]){
        int [] p = {1,5,8,9};
        System.out.println(buttom_up_cut(p));
    }
    //p[]表示钢条价格表
    private static int buttom_up_cut(int []p){

        int remenber[] = new int[p.length+1];
        //加一是因为p[]的下标是从0到n-1,而remenber[]的下标是从1-n存储对应的钢条最优价格的表

        for(int i = 1;i <= p.length;i++){

            int q = -1;
            ////i代表当前的钢锯条的长度,此循环求解i长度的钢锯的最优价格的值,然后存入下标为为i的remenber[i]
            for(int j = 1; j<=i;j++){
                //表示当前分割方式下,第一段的价格+剩余长度的最优价格=此种分割方式的最高价格
                q = Math.max(q,p[j-1]+remenber[i-j]);

            }
            remenber[i] = q;//保存当前长度的最优解
        }

        return remenber[p.length];//返回最后的求解结果
    }
}

猜你喜欢

转载自blog.csdn.net/lijiaheng525/article/details/80939540