2011肠衣问题
1 D类竞赛题目---具体题目
D题 天然肠衣搭配问题
天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。
传统的生产方式依靠人工,边丈量原料长度边心算,将原材料按指定根数和总长度组装出成品(捆)。
原料按长度分档,通常以0.5米为一档,如:3-3.4米按3米计算,3.5米-3.9米按3.5米计算,其余的依此类推。表1是几种常见成品的规格,长度单位为米,∞表示没有上限,但实际长度小于26米。
表1 成品规格表
最短长度 | 最大长度 | 根数 | 总长度 |
3 | 6.5 | 20 | 89 |
7 | 13.5 | 8 | 89 |
14 | ∞ | 5 | 89 |
为了提高生产效率,公司计划改变组装工艺,先丈量所有原料,建立一个原料表。表2为某批次原料描述。
表2 原料描述表
长度 | 3-3.4 | 3.5-3.9 | 4-4.4 | 4.5-4.9 | 5-5.4 | 5.5-5.9 | 6-6.4 | 6.5-6.9 |
根数 | 43 | 59 | 39 | 41 | 27 | 28 | 34 | 21 |
长度 | 7-7.4 | 7.5-7.9 | 8-8.4 | 8.5-8.9 | 9-9.4 | 9.5-9.9 | 10-10.4 | 10.5-10.9 |
根数 | 24 | 24 | 20 | 25 | 21 | 23 | 21 | 18 |
长度 | 11-11.4 | 11.5-11.9 | 12-12.4 | 12.5-12.9 | 13-13.4 | 13.5-13.9 | 14-14.4 | 14.5-14.9 |
根数 | 31 | 23 | 22 | 59 | 18 | 25 | 35 | 29 |
长度 | 15-15.4 | 15.5-15.9 | 16-16.4 | 16.5-16.9 | 17-17.4 | 17.5-17.9 | 18-18.4 | 18.5-18.9 |
根数 | 30 | 42 | 28 | 42 | 45 | 49 | 50 | 64 |
长度 | 19-19.4 | 19.5-19.9 | 20-20.4 | 20.5-20.9 | 21-21.4 | 21.5-21.9 | 22-22.4 | 22.5-22.9 |
根数 | 52 | 63 | 49 | 35 | 27 | 16 | 12 | 2 |
长度 | 23-23.4 | 23.5-23.9 | 24-24.4 | 24.5-24.9 | 25-25.4 | 25.5-25.9 | ||
根数 | 0 | 6 | 0 | 0 | 0 | 1 |
根据以上成品和原料描述,设计一个原料搭配方案,工人根据这个方案“照方抓药”进行生产。
公司对搭配方案有以下具体要求:
这个直接就是表达式
(1) 对于给定的一批原料,装出的成品捆数越多越好;
(2) 对于成品捆数相同的方案,最短长度最长的成品越多,方案越好;
(3) 为提高原料使用率,总长度允许有± 0.5米的误差,总根数允许比标准少1根;
(4) 某种规格对应原料如果出现剩余,可以降级使用。如长度为14米的原料可以和长度介于7-13.5米的进行捆扎,成品属于7-13.5米的规格;
请建立上述问题的数学模型,给出求解方法,并对表1、表2给出的实际数据进行求解,给出搭配方案
2 第一条思路--打药方
我们看到题目有这么这个字眼
对于成品捆数相同的方案,最短长度最长的成品越多,方案越好
这个是解决这个题目的关键,最后一个方案越多,方案越好
14 | ∞ | 5 | 89 |
就是这个方案越多越好,那么我们就要想办法,怎么得出这个方案越多的方法,那么我们就可以想到用0-1变量,为什么我们会想到0-1变量来解决这个问题呢?
我们可以看到题目有这么个字眼
设计一个原料搭配方案,工人根据这个方案“照方抓药”进行生产
这个代表什么呢?就是我们要得到关于14~25.5的这些肠衣里面去挑选,我们要列举去这全部的挑选方案,什么是挑选方案呢?我们可以看到每一个方案后面都会有一个最大长度,那么14~∞这个的最大长度就是89,那么我们只需要挑选的时候,得到这个全部的挑选的方案在88.5~89.5长度里面,那么我们就可以用dfs算法来进行排列枚举,在24种肠衣里面进行挑选就好了,那么就是dfs的组合型枚举
我们利用C++里面的文件输出流和输入流来进行解决这个问题
#include<iostream>
#include<vector>
#include<cstring>
#include<fstream>
using namespace std;long long res4, res5;
const int n = 24;
int ans1[25], ans2[25];double a[25] = {0,14,14.5,15,15.5,16,16.5,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23,23.5,24,24.5,25,25.5
};ofstream outFile("output3.csv");void printPattern(int* selected) {double sum = 0;for (int i = 1; i <= 24; i++) {if (selected[i] > 0) sum += a[i] * selected[i];}outFile << sum << ",";for (int i = 1; i <= 24; i++) {outFile << selected[i];if (i < 24) outFile << ",";}outFile << endl;
}void dfs4(int x, int start) {if (x > 4) {double sum = 0;for (int i = 1; i <= 24; i++) {sum += a[i] * ans1[i];}if (sum >= 88.5 && sum <= 89.5) {res4++;printPattern(ans1);}return;}for (int i = start; i <= 24; i++) {ans1[i]++;dfs4(x + 1, i);ans1[i]--;}
}void dfs5(int x, int start) {if (x > 5) {double sum = 0;for (int i = 1; i <= 24; i++) {sum += a[i] * ans2[i];}if (sum >= 88.5 && sum <= 89.5) {res5++;printPattern(ans2);}return;}for (int i = start; i <= 24; i++) {ans2[i]++;dfs5(x + 1, i);ans2[i]--;}
}int main() {memset(ans1, 0, sizeof(ans1));memset(ans2, 0, sizeof(ans2));dfs4(1, 1);dfs5(1, 1);cout << res4 + res5 << endl;outFile.close();return 0;
}
我们来理解一下这个dfs的思路
void dfs5(int x, int start) {if (x > 5) {double sum = 0;for (int i = 1; i <= 24; i++) {sum += a[i] * ans2[i];}if (sum >= 88.5 && sum <= 89.5) {res5++;printPattern(ans2);}return;}for (int i = start; i <= 24; i++) {ans2[i]++;dfs5(x + 1, i);ans2[i]--;}
}
这个是我们在可以选择重复的,其实这个start不用也是可以的,思路就是我们这个数字的状态就是选择和未选择,当到达5种的时候就直接进行return,然后我们就加上这个对应的数组,然后这个ans是可以代表这个种类选择了多少,然后如果成立的话就输出这个ans就好了
这个时候我们就可以输出到xlx表格上面了,输出文件对应的函数是outFile这方法,输出到表格上面,输出,是表示换到下一列去进行输出
3 按药方进行抓药
这个时候我们有xlsx表格里面存储着这个药房的种类,那么我们就进行按药房抓药就好了,我们还可以很据上面的程序得出这个总的方案数为4286,然后我根据这些药房进行抓取就好了
我们有这么多的方案数,那么就是我们要在这些方案里面的出更多的捆数,因为这就是所有的捆的方案了,我们只需要进行最大值,就是在这么多捆里面得出最大值就好了
所以我们可以写出一个表达式为
这里的2783改为4286,然后我们就要进行约束变量
我们在进行捆的时候,我们捆的是不可以超过他原本给的肠衣的数量的,所以我们就可以建立一个这样的约束条件
模型的学习
这里的bij表示的这个表示这第i种方案的第j种的肠衣的数量,我们把4286所挑选的同一个肠衣的数量进行相加,那么就可以得到这个每一个肠衣数量,然后根这歌aj进行比较也就是对应的肠衣的数量,这样我们就可以得到这歌最大的捆数,这样后面的捆数也是是十分简单就可以进行求解的
4 总结
1 0-1变量的模型构建
1 0-1变量什么时候使用?
当我们在建立最短或者最多这种类型问题的时候,一般都要考虑要用0-1变量,为什么呢?就比如这一个题目,就是我们在进行挑选出最多的捆数的时候,我们只要把所有的捆数进行捆出来,因为这些药材只可以这么捆,得到了这些捆数的方案的话,那么就可以进行对于这么多种类的捆数进行挑选,我们只需要找到最多的的捆数就好了,这个时候就可以用0-1变量,因为只可以捆这么多,我们在最大值加1就好了
2 0-1变量新的构建方法
构建0-1变量模型的时候,我们会遇到类似于这歌题目的情况,例如我们每一个方案里面有多个数据,但是这个数据又有约束
我们根据LINGO编程的技巧来想,求和为sum,后面的约束入i =1..128,这种是进行一个循环
那么我们就可以求和对于这么多种的方案,然后循环对于这些24种的
我们就可以获得这样的约束条件,这就是一个循环一个sum,这样我们就可以进行不断地进行比较了
2 组合
这个直接用我们dfs算法就可以解决了
相关文章:

2011肠衣问题
1 D类竞赛题目---具体题目 D题 天然肠衣搭配问题 天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。 传统的生产…...

RG3000网关构建5G LAN智慧工厂智能制造
在工业4.0与智能制造的趋势下,传统制造业正前后往智慧工厂转型升级。在转型过程中,高效、稳定、灵活的网络通信是实现设备互联互通、数据实时交互与智能决策的基础。智联物联RG3000网关,凭借其融合5G通信技术、WiFi6无线传输、边缘计算能力与…...
Rust语言学习教程、案例与项目实战指引
Rust语言学习教程、案例与项目实战指引 一、入门教程 (一)官方核心文档 Rust官方网站的核心文档是踏上Rust学习征程的绝佳起点。这里犹如一座知识宝库,涵盖了Rust编程时可能遇到的几乎所有内容,从基础语法到高级特性,一…...
通信应用高速模数转换器ADC
在5G通信、医疗成像、航空航天及工业自动化等关键领域,高速ADC模数转换器作为信号链的“心脏”,其性能直接决定了系统的精度与效率。然而,如何精确测试高速ADC的动态参数、优化设计验证流程、应对复杂应用场景的挑战,始终是工程师…...
大模型测评选型指南:企业级大模型测评实战解析
在当今数字化飞速发展的时代,AIGC大模型如雨后春笋般涌现,为各行业带来创新变革的同时,其安全性也成为了不容忽视的关键问题。随着人工智能技术加速落地,AIGC大模型的安全合规已成为产业发展的核心命题。那么,企业该如…...
微信小程序学习目录
个人简介 👨💻个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...
AG32 DMAC实现内部MCU与FPGA通信【知识库】
一、简介 DMAC是独立于MCU和FPGA之外的外设,连接到AHB总线,可通过寄存器配置实现直接内存存取。通过AHB总线实现MCU与FPGA进行高性能通信。理论最高传输速率可达 bus_clock * 32 168MHz * 32 5376Mbps 5.25Gbps,超频到336MHz的形况下&…...

webrtc初了解
1. webrtc的简介 一、WebRTC 是什么? Web Real-Time Communication(网页实时通信),是浏览器原生支持的实时音视频通信技术,无需安装插件或客户端,可直接在浏览器之间实现点对点(P2P)…...

[STM32学习笔记(九)]CubeMX项目使用系统定时器SysTick的中断服务函数进行定时
有很多文章说明了由于HAL_Delay()函数的本质是系统定时器计数,通过全局变量uwTick的不断增加实现的比较延迟。调用HAL_Delay()函数会阻塞其他工作,因此在外设ISR进程调用该延迟时,要特别小心。 因此,现在考虑,既然系统…...
5G 核心网 NGAP UE-TNL 偶联和绑定
引言: 在 5G 核心网架构中,NG 接口作为连接无线接入网(RAN)与核心网(5GC)的关键纽带,承载着大量控制面信令交互。NG 应用协议(NGAP)作为 NG 接口上的核心协议,负责管理 RAN 与 5GC 之间的通信,其中 UE - TNL(User Equipment - Transport Network Layer)偶联和绑定…...
性能测试怎么做?方法、流程与核心要点解析
目录 一、性能测试核心方法论 性能测试五大类型解析 七项关键性能指标 二、性能测试实施流程 需求分析阶段 测试设计阶段 环境搭建要点 测试执行策略 三、性能问题定位与优化 常见瓶颈识别 优化实战案例 四、测试报告编写规范 核心内容框架 数据可视化建议 五、企…...

将ipynb文件转换为markdown格式文件
文章目录 将ipynb文件转换为markdown格式文件nbconvert 包安装nbconvert 使用 将ipynb文件转换为markdown格式文件 有时候,我们需要把Jupyter notebook的.ipynb格式文件转换为markdown格式.md,便于使用。 那么,我们可以通过安装nbconvert包&a…...

Vulnhub_Zico2_wp
一、信息收集 1、主机发现 arp-scan -l 2、端口扫描 nmap -sS -sV 192.168.66.144 nmap -p- -Pn -sC -sV -n 192.168.66.144 whatweb -v 192.168.66.144 这里开放了3个端口,先80端口拿去目录,然后测试下22端口有没有什么未授权之类的,然后…...

【玩转腾讯混元大模型】腾讯混元大模型AIGC系列产品深度体验
【玩转腾讯混元大模型】腾讯混元大模型AIGC系列产品深度体验 腾讯推出的系列AI产品:混元大模型、大模型图像创作引擎、大模型视频创作引擎、腾讯元宝,共同构成了一个强大的AI生态系统;凭借腾讯自研的大规模预训练技术和先进的自然语言处理、计…...
品优购项目(HTML\CSS)
项目效果可访问 http://zhousunyu.3vdo.club 查看 主页 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…...

Attention Is All You Need论文阅读笔记
Attention is All You Need是如今机器学习研究者必读的论文,该文章提出的Transformer架构是如今很多机器学习项目的基础,说该文章极大推动了机器学习领域的研究也不为过。 但这么重要,也是必读的文章对初学者来说其实并不友好,很多…...
深入理解设计模式之中介者模式
深入理解设计模式之:中介者模式(Mediator Pattern) 一、什么是中介者模式? 中介者模式(Mediator Pattern)是一种行为型设计模式。它通过引入一个中介对象,来封装一组对象之间的交互࿰…...
OpenCV 图像像素的读写操作
一、知识点 1、在OpenCV中,一切图像皆Mat。 2、对图像像素的读写操作,就是对Mat元素的遍历与访问。 3、对Mat使用数组方式遍历与访问。 (1)、函数声明: template<typename _Tp> inline_Tp & Mat::at(int i0, int i1) (2)、参数说明:…...
【前端】【Vue3】vue3性能优化总结
第一章 Vue3性能优化概述 1.1 Vue3性能提升背景 1.1.1 Vue2性能瓶颈分析 1. 响应式原理的局限性 Object.defineProperty 的缺陷:Vue2 使用 Object.defineProperty 来实现响应式。这个方法只能劫持对象的属性,对于新增或删除属性无法自动响应。例如&a…...

如何制作全景VR图?
全景VR图,特别是720度全景VR,为观众提供一种沉浸式体验。 全景VR图能够捕捉场景的全貌,还能将多个角度的图片或视频无缝拼接成一个完整的全景视角,让观众在虚拟环境中自由探索。随着虚拟现实(VR)技术的飞速…...
动态防御新纪元:AI如何重构DDoS攻防成本格局
1. 传统高防IP的静态瓶颈与成本困境 传统高防IP依赖预定义规则库,面对SYN Flood、CC攻击等威胁时,常因规则更新滞后导致误封合法流量。例如,某电商平台曾因静态阈值过滤误封20%的订单接口流量,直接影响营收。以下代码模拟传统方案…...
汽车软件刷写 APP SBL PBL概念
目录 PBL(Primary Boot Loader)SBL(Secondary Boot Loader)PBL与SBL的协作流程在汽车刷写中,APP、PBL、SBL的含义如下: APP:指应用程序(Application),是汽车电子控制单元(ECU)中实现具体功能的软件,如发动机控制、变速箱控制、车身电子稳定系统等功能的程序。在刷…...
自动化中的伦理:驯服人工智能中的偏见与守护合规之路
当算法取代人脑做出关乎就业、信贷、医疗乃至法律判决的决定时,我们赋予机器的不仅仅是效率,更是塑造社会公平的巨大力量。自动化系统在提升生产力的同时,其内在的偏见风险如同暗流涌动,若缺乏道德罗盘与严格约束,本应…...

Flask与PostgreSQL交互教程
目录 1. 项目结构2. 环境准备2.1 安装依赖2.2 使用Docker启动PostgreSQL 3. 数据库配置3.1 环境变量配置3.2 数据库连接配置 4. 定义数据库模型5. 实现API接口5.1 创建用户5.2 获取所有用户5.3 获取单个用户5.4 更新用户5.5 删除用户 6. 运行应用7. API测试7.1 创建用户7.2 获取…...

XJTU-SY轴承振动数据集的json自封装
1.最终形式的形式 不用再去翻文档找对应的故障类型,采样率等信息了,所有的信息自包含在.json文件里,15个测试例,一个测试例对应一整个.json文件。 {"dataset": {"name": "XJTU-SY_Bearing_Datasets&quo…...

Spring AI 系列2: Advisors增强器简介
一、Advisors简介 1.1 Advisors定义 Advisors 是在 AI 应用程序中处理请求和响应的拦截器。我们可以使用它们为提示流程设置额外的功能。例如,可以建立聊天历史、排除敏感词或为每个请求添加额外的上下文。 Spring AI的Advisor,本质上是一个拦截…...

通过Func实现飞书应用通知消息加急处理
前言 在现代企业运作中,及时响应告警信息对保障系统的稳定性和业务的连续性至关重要。随着业务的数字化转型,越来越多的企业依赖于复杂的技术架构,这使得故障和异常事件的及时处理变得愈发重要。传统的告警通知方式往往存在响应不及时、信息…...

【目标检测】【AAAI-2022】Anchor DETR
Anchor DETR: Query Design for Transformer-Based Object Detection 锚点DETR:基于Transformer的目标检测查询设计 论文链接 代码链接 摘要 在本文中,我们提出了一种基于Transformer的目标检测新型查询设计。此前的Transformer检测器中&am…...
Spring Cloud Alibaba 学习 —— 简单了解常用技术栈
Spring Cloud Alibaba 官网:https://sca.aliyun.com/ 什么是 Spring Cloud Alibaba Spring Cloud Alibaba 是 Spring Cloud 规范在阿里生态的扩展实现,结合了阿里自研组件与开源生态,提供面向云原生场景的微服务解决方案。其核心功能可概括…...

智慧工厂整体解决方案
该方案围绕智能工厂建设,阐述其基于工业 4.0 和数字化转型需求,通过物联网、大数据、人工智能等技术实现生产自动化、数据化管理及联网协同的特点。建设步骤包括评估现状、设定目标、制定方案、测试调整、实施计划及持续改进,需整合 MES、ERP 等软件系统与传感器、机器人等硬…...