动态规划之钢条切割问题:自顶向下(Python实现)

简介: 动态规划之钢条切割问题:自顶向下(Python实现)
#
#钢条切割问题:自顶向下(由大到小)
#
#自顶向下递归实现
# def CUT_ROD(p,n):
#     if n==0:
#         return 0;
#     q = -1000
#     for i in range(1,n):
#         q = max(q,p[i]+CUT_ROD(p,n-i))
#     return q
#获得最大值
def max(a,b):
    maxData = a;
    if maxData < b:
        maxData = b;
    return maxData
# 备忘机制的CUT-ROD
def MEMOIZED_CUT_ROD_AUX(p, n, r):
    # print("p=",p)
    # print("n=",n)
    # print("r=",r)
    n = n - 1
    if r[n] >= 0:
        return r[n]
    if n == 0:
        q = 0
    else:
        q = -9999
        for i in range(1, n):
            # print(int(p[i]))
            q = max(q, int(p[i]) + int(MEMOIZED_CUT_ROD_AUX(p,n-i,r)))
    r[n] = q
    return q
def MEMOIZED_CUT_ROD(p,n):
    r = {}
    for i in range(0,n):
        r[i] = -9999
    return MEMOIZED_CUT_ROD_AUX(p,n,r)
if __name__ == '__main__':
    p = [1,5,8,9,10,17,17,20,24,30]
    #长度  i   0   1  2 3 4 5 6 7 8 9 10
    #价格 pi      0  1  5 8 9 10  17  17  20  24  30
    n = 20
    print("最大的收益:",MEMOIZED_CUT_ROD(p,10))

目录
相关文章
|
23天前
|
算法 数据挖掘 开发者
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
|
23天前
|
SQL 算法 数据可视化
python 贪心算法 动态规划实现 跳跃游戏ll【力扣题45】
python 贪心算法 动态规划实现 跳跃游戏ll【力扣题45】
|
23天前
|
存储 SQL 算法
【动态规划】切割钢条详解python
【动态规划】切割钢条详解python
|
23天前
|
存储 SQL 算法
动态规划Dynamic programming详解-背包问题【python】
动态规划Dynamic programming详解-背包问题【python】
|
23天前
|
存储 SQL 算法
动态规划详解-最小路径和问题【python】
动态规划详解-最小路径和问题【python】
|
23天前
|
存储 SQL 算法
动态规划Dynamic programming详解-硬币找零问题【python】
动态规划Dynamic programming详解-硬币找零问题【python】
|
23天前
|
SQL 算法 数据挖掘
动态规划Dynamic programming详解-编辑距离问题【python】
动态规划Dynamic programming详解-编辑距离问题【python】
|
存储 算法 决策智能
Python算法题解:动态规划解0-1背包问题
Python算法题解:动态规划解0-1背包问题
|
1天前
|
Java UED Python
Python多线程编程实战技巧与性能优化策略
Python多线程编程实战技巧与性能优化策略
|
4天前
|
设计模式 程序员 测试技术
老程序员分享:Python数据模型及Pythonic编程
老程序员分享:Python数据模型及Pythonic编程
16 1