首页 > 其他分享 >数学建模__动态规划

数学建模__动态规划

时间:2023-09-29 22:32:49浏览次数:36  
标签:__ 件物品 weight capicity 建模 value num 动态 dp


动态规划就是,将任务每一步均记录下来,以便将来重复使用时能够直接调用


问题描述:给定n个物品,每个物品的重量是Wi,价值是Vi,但是背包最多能装下capacity重量的物品,问我们如何选择才能利益最大化。


这里涉及到建模过程,本文章主要讲解代码实现,建模过程较为简略。


使用dp[i][j]来表示在容量为j的情况下,前i件物品的最大化利益。

情况一:放入第i件物品前,发现j<weight[i],因此dp[i][j]此时仍然是dp[i-1][j](也就是dp[i][j]没有发生变化)。
情况二:放入第i件物品时,发现j >= weight[i],此时你放入这件物品与否要看放进去以后利益是如何变化的。
①不放入,那么dp[i][j]的值还是dp[i-1][j]。
②放入,那么dp[i][j]的值是dp[i-1][j-weight[i]]+value[i]。(想一想对不对)

那么具体实现代码如下

weight = [1,2,5,6,7,9]
value = [1,6,18,22,28,36]

num = 6
capicity = 13


def fun(num, capicity, weight, value):
    #构造一个num+1行,capicity+1列的二维数组
    #便于下标从1开始使用
    dp = np.array([[0]*(capicity+1)]*(num+1))
 

    #dp[i][j]表示第前i件物品在容量为j下的最大价值
    #最终需要知道dp[num][capicity]也就是dp[6][13],在容量为13情况下前6件物品的最大价值是多少。
    #进一步的需要知道dp[][]
    for i in range(1,num+1):
        for j in range(1, capicity+1):
            if j >= weight[i-1]:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i-1]]+price[i-1])
            else:
                dp[i][j] = dp[i-1][j]

    print(dp)

fun(num, capicity, weight, value)

数学建模__动态规划_ci


核心就在于这个动态转移方程。

数学建模__动态规划_建模_02

虽写下这篇笔记,但有关动态规划的问题还需多多研究,加深理解。


标签:__,件物品,weight,capicity,建模,value,num,动态,dp
From: https://blog.51cto.com/u_14597003/7654066

相关文章

  • 数学建模__线性规划Python实现
    我使用到的是python库中scipy。'''线性规划'''#目标函数的系数#minz=2x1+3x2-5x3c=np.array([-2,-3,5])#不等式限制条件的系数,转化为小于等于#2x1-5x2+x3<=10,x1+3x2+x3<=12Aup=np.array([[-2,5,-1],[-1,-3,-1]])#必须是二维#右侧系数bup=np.array([-1......
  • 数学建模__非线性规划Python实现
    使用到的是scipy库线性规划指的是目标模型均为线性,除此以外的都是非线性规划,使用scipy提供的方法对该类问题进行求解。fromscipy.optimizeimportminimizeimportnumpyasnp#定义目标函数deffun(args):a,b,c,d=argsv=lambdax:(a+x[0])/(b+x[1])-c*x[0]......
  • python生成词云图
    importwordcloudimportmatplotlib.pyplotaspltfromimageioimportimreadprint([1,2]+[3,4])#创建一个词云对象wc=wordcloud.WordCloud()img=imread(r'F:\PyCharm\test\bg.jpg')#要生成词云的文本text='''Whycanpre-trainedlanguagem......
  • 80道高频算法题Python版
    80道高频算法题来源于牛客网,这些答案都经过了我验证,可以复制粘贴后提交通过:掌握这80道题,99%的测试岗位算法考试都能通过。建议收藏后反复练习。本文为Python版本答案,对于Java版本答案,请在电子书《算法挑战》目录中查看。1、NC1大数加法:中等#计算两个数之和#@paramsstrin......
  • 浏览器内视频播放插件以edge为例
    针对浏览器内视频播放的扩展目录针对浏览器内视频播放的扩展插件介绍Tampermonkey增强脚本脚本使用场景安装教程插件介绍Tampermonkey是一款免费的浏览器扩展和最为流行的用户脚本管理器。虽然有些受支持的浏览器拥有原生的用户脚本支持,但Tampermonkey将在用户脚本管......
  • Java集合框架(部分)
    类图List:有序可重复集合特点1.元素允许重复2.元素有序(元素的顺序就是插入时的顺序)3.元素可以通过索引来访问或者设置{ArrayLIst:底层为数组,查询速度快,增删慢LinkedList:底层是链表,查询速度慢,增删快两者的优缺点,:效率高,线程不安全}Set:无序不可重复集合HashSet:底层为数组,......
  • [题解] CF1003E - Tree Constructing
    CF1003E-TreeConstructing题目传送门知识点:贪心题意给定\(n\)个顶点,问是否能够构造出一棵直径为\(d\)的树,且每个顶点的度数最多为\(k\)。思路我们要构造出一棵树,使得其直径长度一定为\(d\),那么我们可以先选择\(d+1\)个点,让这些点构成一条树链即可。接着,考虑......
  • 20230928
    //accommodate,bargain,concession,consider,dicker,exception,figure,haggle,induce,minimum,practically,atasacrificeaccommodate-容纳Toaccommodatemeanstoprovideaplaceorspaceforsomeoneorsomething.Itcanalsorefertoadjustingorad......
  • 20230929
    //accommodate,bargain,concession,consider,dicker,exception,figure,haggle,induce,minimum,practically,atasacrificeaccommodate-容纳Toaccommodatemeanstoprovideaplaceorspaceforsomeoneorsomething.Itcanalsorefertoadjustingorad......
  • Windows 每天定时执行 bat 脚本
    创建包含如下内容的bat文件:forfiles/p"."/s/m*.temp*/d-31/c"cmd/cdel@file"它会删除当前路径下的所有以.temp结尾的超过31天的旧文件(详见bat删除当前路径指定天数前的旧文件)。现在想每天中午12点定时执行该文件:打开任务计划程序选择左侧任务计划......