2011肠衣问题

news2025/6/2 10:21:15

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算法就可以解决了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2393942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RG3000网关构建5G LAN智慧工厂智能制造

在工业4.0与智能制造的趋势下&#xff0c;传统制造业正前后往智慧工厂转型升级。在转型过程中&#xff0c;高效、稳定、灵活的网络通信是实现设备互联互通、数据实时交互与智能决策的基础。智联物联RG3000网关&#xff0c;凭借其融合5G通信技术、WiFi6无线传输、边缘计算能力与…

webrtc初了解

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

[STM32学习笔记(九)]CubeMX项目使用系统定时器SysTick的中断服务函数进行定时

有很多文章说明了由于HAL_Delay()函数的本质是系统定时器计数&#xff0c;通过全局变量uwTick的不断增加实现的比较延迟。调用HAL_Delay()函数会阻塞其他工作&#xff0c;因此在外设ISR进程调用该延迟时&#xff0c;要特别小心。 因此&#xff0c;现在考虑&#xff0c;既然系统…

将ipynb文件转换为markdown格式文件

文章目录 将ipynb文件转换为markdown格式文件nbconvert 包安装nbconvert 使用 将ipynb文件转换为markdown格式文件 有时候&#xff0c;我们需要把Jupyter notebook的.ipynb格式文件转换为markdown格式.md&#xff0c;便于使用。 那么&#xff0c;我们可以通过安装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个端口&#xff0c;先80端口拿去目录&#xff0c;然后测试下22端口有没有什么未授权之类的&#xff0c;然后…

【玩转腾讯混元大模型】腾讯混元大模型AIGC系列产品深度体验

【玩转腾讯混元大模型】腾讯混元大模型AIGC系列产品深度体验 腾讯推出的系列AI产品&#xff1a;混元大模型、大模型图像创作引擎、大模型视频创作引擎、腾讯元宝&#xff0c;共同构成了一个强大的AI生态系统&#xff1b;凭借腾讯自研的大规模预训练技术和先进的自然语言处理、计…

Attention Is All You Need论文阅读笔记

Attention is All You Need是如今机器学习研究者必读的论文&#xff0c;该文章提出的Transformer架构是如今很多机器学习项目的基础&#xff0c;说该文章极大推动了机器学习领域的研究也不为过。 但这么重要&#xff0c;也是必读的文章对初学者来说其实并不友好&#xff0c;很多…

如何制作全景VR图?

全景VR图&#xff0c;特别是720度全景VR&#xff0c;为观众提供一种沉浸式体验。 全景VR图能够捕捉场景的全貌&#xff0c;还能将多个角度的图片或视频无缝拼接成一个完整的全景视角&#xff0c;让观众在虚拟环境中自由探索。随着虚拟现实&#xff08;VR&#xff09;技术的飞速…

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.最终形式的形式 不用再去翻文档找对应的故障类型&#xff0c;采样率等信息了&#xff0c;所有的信息自包含在.json文件里&#xff0c;15个测试例&#xff0c;一个测试例对应一整个.json文件。 {"dataset": {"name": "XJTU-SY_Bearing_Datasets&quo…

Spring AI 系列2: Advisors增强器简介

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

通过Func实现飞书应用通知消息加急处理

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

【目标检测】【AAAI-2022】Anchor DETR

Anchor DETR&#xff1a; Query Design for Transformer-Based Object Detection 锚点DETR&#xff1a;基于Transformer的目标检测查询设计 论文链接 代码链接 摘要 在本文中&#xff0c;我们提出了一种基于Transformer的目标检测新型查询设计。此前的Transformer检测器中&am…

智慧工厂整体解决方案

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

秋招Day12 - 计算机网络 - TCP

详细说一下TCP的三次握手机制 TCP的三次握手机制是为了在两个主机之间建立可靠的连接&#xff0c;这个机制确保两端的通信是同步的&#xff0c;并且在开始传输数据前&#xff0c;双方都做好了要通信的准备。 说说SYN的概念&#xff1f; SYN 是 TCP 协议中用来建立连接的一个标…

vueflow

自定义节点&#xff0c;自定义线&#xff0c;具体细节还未完善&#xff0c;实现效果&#xff1a; 1.安装vueflow 2.目录如下 3. index.vue <script setup> import { ref } from vue import { VueFlow, useVueFlow } from vue-flow/core import { Background } from vue-…

LearnOpenGL-笔记-其十一

Normal Mapping 又到了介绍法线贴图的地方&#xff0c;我感觉我已经写了很多遍了... 法线贴图用最简单的话来介绍的话&#xff0c;就是通过修改贴图对应物体表面的法线来修改光照效果&#xff0c;从而在不修改物体实际几何形状的前提下实现不同于物体几何形状的视觉效果。 因…

openppp2 -- 1.0.0.25225 优化多线接入运营商路由调配

本文涉及到的内容&#xff0c;涉及到上个发行版本相关内容&#xff0c;人们在阅读本文之前&#xff0c;建议应当详细阅读上个版本之中的VBGP技术相关的介绍。 openppp2 -- 1.0.0.25196 版本新增的VBGP技术-CSDN博客 我们知道在现代大型的 Internet 网络服务商&#xff0c;很多…

详细到用手撕transformer下半部分

之前我们讨论了如何实现 Transformer 的核心多头注意力机制&#xff0c;那么这期我们来完整地实现整个 Transformer 的编码器和解码器。 Transformer 架构最初由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出&#xff0c;专为序列到序列&#xff08;seq2s…

【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析

目录 1 Sqoop概述与大数据生态定位 2 Sqoop与HDFS的深度集成 2.1 技术实现原理 2.2 详细工作流程 2.3 性能优化实践 3 Sqoop与Hive的高效协同 3.1 集成架构设计 3.2 数据类型映射处理 3.3 案例演示 4 Sqoop与HBase的实时集成 4.1 数据模型转换挑战 4.2 详细集成流程…