首页 > 其他分享 >动态规划--钢条切割问题

动态规划--钢条切割问题

时间:2023-08-19 18:44:13浏览次数:30  
标签:cut return 钢条 -- res rod time def 切割

博客地址:https://www.cnblogs.com/zylyehuo/

# -*- coding: utf-8 -*-

import time


def cal_time(func):
    def wrapper(*args, **kwargs):
        t1 = time.time()
        result = func(*args, **kwargs)
        t2 = time.time()
        print("%s running time: %s secs." % (func.__name__, t2 - t1), end='--------------------')
        return result

    return wrapper


p = [0, 1, 5, 8, 9, 10, 17, 17, 20, 21, 23, 24, 26, 27, 27, 28, 30, 33, 36, 39, 40]


# p = [0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30]

# 递归--计算效率低
def cut_rod_recurision_1(p, n):
    if n == 0:
        return 0
    else:
        res = p[n]
        for i in range(1, n):
            res = max(res, cut_rod_recurision_1(p, i) + cut_rod_recurision_1(p, n - i))
        return res


@cal_time
def c1(p, n):
    return cut_rod_recurision_1(p, n)


def cut_rod_recurision_2(p, n):
    if n == 0:
        return 0
    else:
        res = 0
        for i in range(1, n + 1):
            res = max(res, p[i] + cut_rod_recurision_2(p, n - i))
        return res


@cal_time
def c2(p, n):
    return cut_rod_recurision_2(p, n)


print(c1(p, 15))
print(c2(p, 15))


# 自底向上实现
@cal_time
def cut_rod_dp(p, n):
    r = [0]
    for i in range(1, n + 1):
        res = 0
        for j in range(1, i + 1):
            res = max(res, p[j] + r[i - j])
        r.append(res)
    return r[n]


print(cut_rod_dp(p, 15))


# 重构解
def cut_rod_extend(p, n):
    r = [0]
    s = [0]
    for i in range(1, n + 1):
        res_r = 0  # 价格的最大值
        res_s = 0  # 价格最大值对应方案的左边不切割部分的长度
        for j in range(1, i + 1):
            if p[j] + r[i - j] > res_r:
                res_r = p[j] + r[i - j]
                res_s = j
        r.append(res_r)
        s.append(res_s)
    return r[n], s


print("=================================重构解=================================")
r, s = cut_rod_extend(p, 20)
print(s)


# 切割方案
def cut_rod_solution(p, n):
    r, s = cut_rod_extend(p, n)
    ans = []
    while n > 0:
        ans.append(s[n])
        n -= s[n]
    return ans


print("================================按如下切割===============================")
print(cut_rod_solution(p, 20))

标签:cut,return,钢条,--,res,rod,time,def,切割
From: https://www.cnblogs.com/zylyehuo/p/17642856.html

相关文章

  • 2-13-Gateway网关-快速入门
    搭建网关1.新建springboot项目2.将新建项目作为模块加入原有体系<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL......
  • 2023.8 水题记录
    集训回来之后做题频率下来了.1.CF1856DMoreWrong这场CF场上只写出来ABD(主要卡B的证明上了),什么水平?90%交互=binarysearch(暴论)2.CF1851GVladandtheMountains是我没见过的操作.学到了.3.CF1856CToBecomeMax考试的时候没看.很简单.4.CF1270G......
  • Delphi获取文件创建时间、文件最后修改时间
    procedureTForm1.Button1Click(Sender:TObject);//获取文件创建时间varFileName:string;ti:Integer;dt:TDateTime;beginFileName:='D:\test\Test.txt';ti:=FileAge(FileName);ShowMessage(IntToStr(ti));//返回:1030115371,需要转换dt:=F......
  • Hibernate文字与格式化字符串不匹配错误
    今天这个呢,主要是在使用Hibernate的时候遇到过这个问题,想着别人可能也会遇到这个问题,那么就简单的来记录一下问题的产生以及解决方案。事情的起因是做一个需求,然后测试反馈说这个有个功能报错阻断流程了,让抽时间排查一下,我一开始以为是数据问题,后来我自己环境上尝试了一下,也的确......
  • 大厂 Framework 面试必备 Handler&Binder&AMS 面试题
    前言大家都知道现在AndroidFramework成为头部公司必不缺少的技术栈之一,尤其是熟悉Franmework源码的Android开发者,在面试中往往会占到很大的优势那我今天就带来AndroidFramework比较高刷的面试题分享,总共包含以下四大类:系统启动流程面试题解析Binder面试题解析Handler面......
  • ThinkPHP6学习笔记2
    门面模式facadefacade不能在模型里面建立关联关系:这里是属于注入是不能使用facade类的Facade怎么获取model实例对象-facedeinstance方法$model=TestFacadeModel::instance();-容器类直接实例化$model=app(TestModel::class,[],true);-facade定义类新建......
  • C语言基本知识要点:
    目录一.基本数据类型 1.数据类型划分 2.基本数据类型的基本知识(32位系统) (1)整型:short2字节,int4个字节,long4个字节 (2)字符型:char2个字节(一一对应ASCII码) (3)浮点型: 3.进制转换 (1)八进制转二进制 八进制数据的1位对应二进制数据的3位 (2)十六进制转二进制 4.数据在内存中的存储方......
  • qt qq登录界面
    步骤:    做好了一个新的界面:   接下来开始添加图片:                  接下来进行界面的切换。         接下来通过点击按钮,进行界面的切换。           ......
  • C语言基本知识要点:
    目录一.基本数据类型 1.数据类型划分 2.基本数据类型的基本知识(32位系统) (1)整型:short2字节,int4个字节,long4个字节 (2)字符型:char2个字节(一一对应ASCII码) (3)浮点型: 3.进制转换 (1)八进制转二进制 八进制数据的1位对应二进制数据的3位 (2)十六进制转二进制 4.数据在内存中的存储方......
  • 卓钥商学苑:创业期间被合伙人背叛了怎么办?处理方式有哪些?
    来源:BV1bh411P7ef合伙人背叛了你怎么办?处理方式有哪些?当您选择和其他人一起创业,您会很快发现,与人合作还是很容易出现问题的。有些人在面对困难时可能会逃避,甚至会背叛您。这不仅会对您的事业产生负面影响。而且会给您带来巨大的心理压力和痛苦。那么当您的合作伙伴背叛您时,您......