优化策略:揭秘钢条切割与饼干分发的算法艺术

引言

        在生活中,钢条和饼干看似风马牛不相及,但它们的分割与分发却隐藏着惊人的数学魅力。如何最大化利润?如何用有限的资源最大程度满足需求?这便是算法世界中的艺术。今天,我们来揭秘钢条切割与饼干分发的算法设计。本文不仅有趣,也能带你领略算法的美妙和工程师的智慧。

1.钢条切割
1.1题目描述

某公司的主营业务是切割整段钢条并出售,切割钢条的成本和损耗忽略不计。

该公司现有以下长度的钢条:

钢条长度/米101215
成本/百元101215

已知不同长度的钢条的出售价格:

钢条长度/米

1

2

3

4

5

6

7

8

9

10

售价/百元

1

5

8

9

10

17

17

20

24

24

  1. 假如你是该公司的工程师,试确定每条钢条的切割方式使盈利最大。
  2. 经过技术攻关,公司掌握了将钢条焊接的方法,且每次焊接所需成本为1百元,试确定钢条的焊接或/和切割方式使盈利最大。

1.2算法设计 (第一部分:不考虑焊接)

        采用动态规划法。dp[i] 表示长度为 i 米钢条的最大收益。状态转移方程:

  dp[i] = max(price[i], dp[i-j] + dp[j]) (1 ≤ j ≤ i)

        其中 price[i] 为长度为 i 米钢条的售价。

1.3伪代码实现 (第一部分:不考虑焊接)

function max_profit_no_weld(prices, n):dp = array of size n+1, initialized to 0for i from 1 to n:max_p = prices[i]for j from 1 to i:max_p = max(max_p, dp[i-j] + dp[j])dp[i] = max_preturn dp[n]


1.4算法设计 (第二部分:考虑焊接)

        仍然采用动态规划。dp[i] 表示长度为 i 米钢条的最大收益,考虑焊接成本。状态转移方程更加复杂,需要考虑所有可能的切割和焊接组合:

   dp[i] = max(price[i], max(dp[j] + dp[i-j] - 1, dp[j] + price[i-j] - 1, price[j] + dp[i-j] - 1)) (1 ≤ j ≤ i/2)

1.5伪代码实现 (第二部分:考虑焊接)

function max_profit_weld(prices, n):dp = array of size n+1, initialized to -infinity  // Initialize with a very small valuedp[0] = 0for i from 1 to n:dp[i] = prices[i] // Initialize with no cutfor j from 1 to i/2:dp[i] = max(dp[i], dp[j] + dp[i-j] - 1)dp[i] = max(dp[i], dp[j] + prices[i-j] - 1)dp[i] = max(dp[i], prices[j] + dp[i-j] - 1)return dp[n]

2.饼干分发
2.1题目描述

假设你是一个幼儿园园长,现在要给孩子们分发饼干。由于饼干数量有限,每个孩子都只能得到一块饼干。其中,孩子i所需的饼干大小为gi,饼干j的大小为sj,若sj≥gi则孩子能够吃饱。你的目标是尽可能喂饱更多数量的孩子,并输出这个最大数值。

示例1:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,但饼干的尺寸都是1只能让胃口值是1的孩子满足,所以输出1。

输入:g=[1,2,3],s=[1,1]

输出:1

示例2:你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足,所以输出2。

输入:g =[1,2],s=[1,2,3]

输出:2

1.现有如下饼干和孩子,试求其输出。

第一组:

g=[1 2 2 3 5 6 8 10]

s=[1 1 2 2 4 5 5 6 7 8 9 10]

第二组:

g=[12 5 8 1 5 3 7 5 8 6]

s=[15 6 8 5 2 8 7 4 5 1 2 4 3 6]

2.经过和孩子友好协商,孩子同意每个孩子可以有最多两块饼干,针对上述两组饼干和孩子试求能否喂饱更多孩子。

2.2算法设计 (第一部分:每个孩子一块饼干)

采用贪心算法。先对 g 和 s 排序,然后从最小的孩子开始,分配最小的满足条件的饼干。

2.3伪代码实现 (第一部分:每个孩子一块饼干)

function max_satisfied_children(g, s):sort g in ascending ordersort s in ascending ordercount = 0i = 0, j = 0while i < length(g) and j < length(s):if s[j] >= g[i]:count = count + 1i = i + 1j = j + 1else:j = j + 1return count

2.4算法设计 (第二部分:每个孩子最多两块饼干)

        仍然采用贪心算法,但需要修改分配策略。先尝试分配一块饼干,如果满足不了,再尝试分配两块。

2.5伪代码实现(第二部分:每个孩子最多两块饼干)

function max_satisfied_children_two(g, s):sort g in ascending ordersort s in ascending ordercount = 0i = 0, j = 0while i < length(g) and j < length(s):if s[j] >= g[i]:count = count + 1i = i + 1j = j + 1else:k = j + 1if k < length(s) and s[j] + s[k] >= g[i]:count = count + 1i = i + 1j = k + 1else:j = j + 1return count

        通过这两个问题的探讨,我们可以看到算法在解决实际问题中的强大能力。无论是在工业生产中的钢条切割问题,还是在日常生活中的饼干分发问题,算法都能提供高效且经济的解决方案。这些算法不仅体现了数学的精妙,也展示了工程师在解决实际问题时的智慧和创造力。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全星魅-物联网定位终端-北斗定位便携终端-北斗有源终端

在当今快速发展的物流运输行业中&#xff0c;精准定位与实时监控已成为确保货物安全与高效运输的关键因素。为了满足这一需求&#xff0c;QMCZ10作为一款集4G&#xff08;LTE Cat1&#xff09;通讯技术与智能定位功能于一体的终端产品&#xff0c;应运而生。它不仅具备普通定位…

交换机属性-持久化和自动删除等

交换机属性-持久化和自动删除 1、交换机属性2、交换机(Exchange)的持久化属性2.1、RabbitConfig配置类&#xff08;关键代码&#xff09;2.2、发送消息2.3、启动类2.4、application.yml配置文件2.5、pom.xml配置文件2.6、测试 3、交换机(Exchange)的自动删除属性3.1、RabbitCon…

基于Prometheus的client_golang库实现应用的自定义可观测监控

文章目录 1. 安装client_golang库2. 编写可观测监控代码3. 运行效果4. jar、graalvm、golang编译运行版本对比 前文使用javagraalvm实现原生应用可观测监控&#xff1a; prometheus client_java实现进程的CPU、内存、IO、流量的可观测&#xff0c;但是部分java依赖包使用了复杂…

Unity3D UI 拖拽

Unity3D 实现 UI 元素拖拽功能。 UI 拖拽 通常画布上的 UI 元素都是固定位置的&#xff0c;我们可以通过实现拖拽接口&#xff0c;让 UI 元素可以被拖拽到其他位置。 拖拽接口 创建一个脚本 UIDrag.cs&#xff0c;在默认继承的 MonoBehaviour 后面&#xff0c;再继承三个接…

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式 《重学Java设计模式》之 原型模式 《重学Java设计模式》之 单例模式 模拟发奖多种商品 工程结构 奖品发放接口 package com.yys.mes.design.factory.store;public interface ICommodity {/*** Author Sherry* Date 14:20 2024/11/6**/voi…

【Python爬虫实战】DrissionPage 与 ChromiumPage:高效网页自动化与数据抓取的双利器

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、DrissionPage简介 &#xff08;一&#xff09;特点 &#xff08;二&#xff09;安装 &#xff08;三…

Word大珩助手:超大数字怎么读?35位数字?69位数字?

俄罗斯日前对谷歌开出了20000000000000000000000000000000000&#xff08;35位数字&#xff09;美元的罚款 这一数字远超全球GDP总和&#xff0c;消息一出很快就登上热搜。 面对这样一个庞大的数字&#xff0c;人们不禁好奇&#xff0c;这样的数字该如何读出来&#xff1f; …

Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized

这里是Themberfue 在上一节的最后&#xff0c;我们讨论两个线程同时对一个变量累加所产生的现象 在这一节中&#xff0c;我们将更加详细地解释这个现象背后发生的原因以及该如何解决这样类似的现象 线程安全问题 public class Demo15 {private static int count 0;public …

17、论文阅读:VMamba:视觉状态空间模型

前言 设计计算效率高的网络架构在计算机视觉领域仍然是一个持续的需求。在本文中&#xff0c;我们将一种状态空间语言模型 Mamba 移植到 VMamba 中&#xff0c;构建出一个具有线性时间复杂度的视觉主干网络。VMamba 的核心是一组视觉状态空间 (VSS) 块&#xff0c;搭配 2D 选择…

JavaAPI(1)

Java的API&#xff08;1&#xff09; 一、Math的API 是一个帮助我们进行数学计算的工具类私有化构造方法&#xff0c;所有的方法都是静态的&#xff08;可以直接通过类名.调用&#xff09; 平方根&#xff1a;Math.sqrt()立方根&#xff1a;Math.cbrt() 示例&#xff1a; p…

【362】基于springboot的在线租房和招聘平台

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统在线租房和招聘平台信息管理难度大&#xff0c;容错率低&…

华为HCIP —— QinQ技术实验配置

一、QinQ的概述 1.1QinQ的概念 QinQ&#xff08;802.1Q in 802.1Q&#xff09;技术是一项扩展VLAN空间的技术&#xff0c;通过在原有的802.1Q报文基础上再增加一层802.1Q的Tag来实现。 1.2QinQ封装结构 QinQ封装报文是在无标签的以太网数据帧的源MAC地址字段后面加上两个VL…

【数据集】【YOLO】【目标检测】抽烟识别数据集 6953 张,YOLO/VOC格式标注,吸烟检测!

数据集介绍 【数据集】抽烟识别数据集 6953 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含1种分类&#xff1a;“smoking”。数据集来自国内外图片网站和视频截图。检测范围园区吸烟检测、禁烟区吸烟检测、监控吸烟检测、无人机吸烟检测等。 主页私…

赛元MCU 脱机烧录步骤

烧录设置 生成烧录配置文件 载入配置文件 下载程序到烧录器中 并 对比 脱机烧录 1、 将SC-LINK 使用外部5V电源供电 2、将烧录口对准主板烧录接口 3、busy亮红灯&#xff0c;进入烧录ing&#xff0c;烧录成功后&#xff0c;OK灯亮蓝灯 注意事项 其中工程校验和 可以作为程序…

leetcode字符串(二)-重复的子字符串

题目 459.重复的子字符串 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。示例 2: 输入: s "aba" 输出: false示例 3: 输入: …

langchain 4大组件 | AI应用开发

在人工智能的浪潮中&#xff0c;大型语言模型&#xff08;LLM&#xff09;逐渐成为推动科技进步的重要力量。而LangChain&#xff0c;作为一个专为LLM应用开发设计的框架&#xff0c;凭借其模块化和高效性&#xff0c;受到了广泛关注。本文将深入浅出地讲解LangChain中的四个基…

TensorFlow|咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 &#x1f37a; 要求&#xff1a; 自己搭建VGG-16网络框架调用官方的VGG-16网络框架 &#x1f37b; 拔高&#xff08;可选&#xff09;&#xff1a; 验证集准…

Jmeter5.X性能测试

Jmeter5.X性能测试 文章目录 Jmeter5.X性能测试一、掌握Http基础协议1.1 浏览器的B/S架构和C/S架构1.2 HyperText Transfer Protocol 超文本传输协议1.3 超文本传输协议Http消息体拆分讲解1.4 HTTP的九种请求方法和响应码介绍1.5 Http请求头/响应头1.6 Http常见请求/响应头cont…

信息安全工程师(81)网络安全测评质量管理与标准

一、网络安全测评质量管理 遵循标准和流程 网络安全测评应严格遵循国家相关标准和流程&#xff0c;确保测评工作的规范性和一致性。这些标准和流程通常包括测评方法、测评步骤、测评指标等&#xff0c;为测评工作提供明确的指导和依据。 选择合格的测评团队 测评团队应具备相关…

AI - 人工智能;Ollama大模型工具;Java之SpringAI(三)

AI - 人工智能&#xff1b;Java之SpringAI&#xff08;一&#xff09; AI - 人工智能&#xff1b;Java之SpringAI&#xff08;二&#xff09; 一、Ollama 官网&#xff1a;https://ollama.com/ Ollama是一个大模型部署运行工具&#xff0c;在该工具里面可以部署运行各种大模型…