连续邮资问题python

  • 问题描述
  • python代码
  • 输出结果

问题描述

问题:给定n种不同面值的邮票,每个信封至多m张,
试给出邮票的最佳设计,使得从1开始,增量为1的连续邮资区间达到最大?

实例:n=5,m=4,
面值 X1=<1,3,11,15,32>,邮资连续区间为{1, 2, …,70}
面值 X2=<1,6,10,20,30>,邮资连续区间为{1, 2, 3, 4}
可行解 :<x1, x2, …, xn>,x1=1, x1< x2< …< xn 约束条件:在结点<x1, x2, …, xi>处,邮资最大连续区间为{1, … , ri },xi+1的取值范围是{xi+1, … , ri+1}

python代码

n=4
m=3
def calc_Sk(Xi_1):xi_1,yi_1,ri_1=Xi_1[-1] if Xi_1 else (0,list(range(0,m+1)),0)Si=range(xi_1+1,ri_1+2)for xi in Si:yi=[0]ri=0flag=Truefor j in range(1,m*xi+1):yij_=[ t+yi_1[j-t*xi] for t in range(0,m+1) if 0<=j-t*xi<len(yi_1) ]if yij_:yij=min(yij_)yi.append(yij)if flag and yij<=m:ri=jelse:flag=Falseelse:breakyield (xi,yi,ri)
def reback(k,Xk_1):#回溯算法的递归实现if k>n :#输出结果Xn=Xk_1.copy()yield Xnelse:#计算SkSk=calc_Sk(Xk_1)#遍历子节点for xk in Sk:       Xk_1.append(xk)Xk=Xk_1yield from reback(k+1,Xk)Xk.pop()Xk_1=Xk
def rebacktrack():yield from reback(1,[])
s=[([i[0] for i in e],e[-1][-1]) for e in rebacktrack()]
print(max(s,key=lambda x:x[1]))

输出结果

([1, 4, 7, 8], 24)

开发环境:VScode + Jupyter notebook
python版本:3.9.12

连续邮资问题python相关推荐

  1. 算法:连续邮资问题(回溯+动态规划+剪枝)

    问题描述 假设国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许m张邮票.连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,即在1张信封上可贴出从邮资1开始,增量为1的最大连续邮资 ...

  2. 回溯算法,模板,拔河,旅行商,连续邮资问题题解

    文章目录 回溯算法模板 递归回溯 迭代回溯 子集树 排列树 题目 拔河问题 旅行商问题 连续邮资问题 回溯算法模板 递归回溯 回溯法对解空间做深度有限搜索,因此在一般情况下可用递归函数来实现回溯法如下 ...

  3. 连续邮资问题-回溯法

    回溯法的设计思想: 回溯法从根节点出发,按照深度优先策略遍历解空间树,搜索满足约束条件的解.在搜索至树中任一节点时,先判断该节点对应的部分解是否满足约束条件I,是否超出目标函数的界,也就是判断该节点是 ...

  4. 5.12回溯法--连续邮资问题--子集树

    回溯法的题目太多了,不想写这个代码了,于是我就开始水一篇文章,就单纯的分析一下这个问题保持整本书完整的队形 问题描述 如何用有限的邮票数,贴出更多面额的需求? 举例 n=5,m=4 设计1:X1={1 ...

  5. 回溯法求解连续邮资问题

    实验内容与要求 内容:假设某国家发行了n中不同面值的邮票,并且规定每张信封上最多只允许贴m张. 要求:对于给定的m和n的值,给出邮票面值的最佳设计,使得可以在一张信封上贴出从邮资1开始,增量为1的最大 ...

  6. 连续邮资问题的回溯法解决办法

    /* 连续邮资问题 算法设计: 该问题是设计最佳的邮票面值,用来表示最大的区间 对于连续邮姿问题,用n元组x[1:n]表示n种不同的邮票面值并约定它们从小到大排列. 整数r表示当前使用不超过m张邮票能 ...

  7. 算法设计:连续邮资问题

    问题描述: 假设某国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票.连续邮资问题要求对于给定的n和m,给出邮票面值的最佳设计,在1张信封上贴出从邮资1开始,增量为1的最大连续邮资区 ...

  8. python 判断数字连续_关于python:检测列表中的连续整数

    本问题已经有最佳答案,请猛点这里访问. 我有一个包含这样的数据的列表: [1, 2, 3, 4, 7, 8, 10, 11, 12, 13, 14] 我想打印出连续整数的范围: 1-4, 7-8, 1 ...

  9. 连续投影算法-python版

    连续投影算法 - SPA python版 文章目录 连续投影算法 - SPA python版 原理 连续投影算法大量用于光谱特征波长选择中,翻遍全网,SPA算法只找到了MATLAB版本. 该版本为MA ...

最新文章

  1. ThinkPHP读取数据库数据到模板文件
  2. Prepare for Android
  3. js调试之console.log()
  4. 导出Excle java
  5. 面试必问系列之在浏览器中输入URL后到网页显示 其间发生了什么?
  6. 读《爱的艺术》书评而问
  7. VS2008 vs2010中JQUERY智能提醒
  8. WMPLib.WindowsMediaPlayer 的用法
  9. java线程异常终止_java线程莫名异常退出时,如何捕获异常信息
  10. 离职因多写3个字被索赔2.9万,这家公司的操作让网友直呼拳头摁了......
  11. VS2017安装MSDN帮助文档
  12. linux soruce 命令,Linux source命令是干啥的?
  13. Android native crash debug
  14. luogu1725 琪露诺
  15. Win10以太网没有有效的IP配置解决方法
  16. 搭建云服务器简单流程【华为云服务器】
  17. CPU卡内部认证与外部认证
  18. 极限挑战 极致突破——奇安信的2022
  19. PHP 中 GD库(以及Jpgraph库) 的配置和使用。(满屏荒唐言,一把辛酸泪)
  20. E课网AHB-SRAMC

热门文章

  1. python3爬虫-中国最好大学排名
  2. 本体(Ontology)应用案例
  3. MyBatis 核心配置综述之 Configuration详解
  4. 徐是华:我在华为工作十年的感悟
  5. JFreeChart应用
  6. CISCO DHCP技术应用大全
  7. 分布式多副本一致性协议paxos
  8. Vue 使用百度地图画点线面和标记
  9. python2.7中,range和xrange的区别
  10. HDU4857 逃生(拓扑排序经典好题)