首页 > 编程语言 >算法设计与分析(乘船问题

算法设计与分析(乘船问题

时间:2024-09-07 20:23:42浏览次数:10  
标签:num int 旅客 算法 乘船 体重 设计 配对

目录

题目描述

给定一批轮船,每艘轮船的最大载重量均为M,每艘船最多只允许装两个人,旅客总人数最多为50人。每个旅客的体重不同。现要求设计算法求出装走所有旅客所需轮船的最少数量。

输入格式

第一行输入为每艘船的最大载重量M和旅客总人数num。
第二行输入是每个旅客的体重(整数)。

输出格式

输出所需最少租船数量。

解题思路

本题可以使用贪心算法来解决。贪心算法的思想是在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。

排序:首先将所有旅客的体重进行从小到大排序。这样可以尽可能地将最重的旅客与最轻的旅客配对,从而更有效地利用每艘船的载重能力。

双指针:使用两个指针p_l和p_r,分别指向体重数组的开始和结束。这两个指针模拟了从两端向中间配对的过程。

遍历:在p_l小于等于p_r的条件下进行循环。每次循环检查当前最轻的旅客和最重的旅客的体重之和是否小于等于船的最大载重量M。

如果是,说明这两个旅客可以装在同一艘船上,将p_l向右移动一位,p_r向左移动一位。
如果不是,说明最重的旅客无法与当前最轻的旅客配对,只能单独装一艘船(或尝试与下一个较轻的旅客配对),将p_r向左移动一位。
计数:每成功装载一对旅客(或单独装载一个旅客),就增加所需的船只数量result。

输出结果:循环结束后,输出result作为答案。

代码实现

下面是该算法的C++实现:

#include<iostream>  
#include<algorithm>  
  
using namespace std;  
  
#define MAXSIZE 50  
  
int main() {  
    // 输入数据   
    int w[MAXSIZE], num, M;  
    cin >> M >> num;  
      
    for (int i = 0; i < num; i++){  
        cin >> w[i];  
    }  
      
    // 贪心算法  
    sort(w, w + num);	// 从小到大排序   
      
    int p_l = 0;  
    int p_r = num - 1;  
    int result = 0;  
      
    while (p_l <= p_r){  
        if ((w[p_l] + w[p_r]) <= M){  
            p_l++;p_r--;  
        }  
        else{  
            p_r--;  
        }  
    }  
      
    cout << result << endl;  
    return 0;  
}  

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||竞赛资料|| ||课程资料||
添加我的公众号即可:

标签:num,int,旅客,算法,乘船,体重,设计,配对
From: https://blog.csdn.net/m0_72249799/article/details/141996978

相关文章

  • Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)
    目录安装软件和配置环境变量Matlab/Simulink和AMEsim联合仿真详细流程非常重要的一点Simulink模型和AMEsim模型用S-Function建立连接从AMEsim软件打开MatlabMatlab里的设置Matlab的.m文件修改(对于PSO-PID算法)运行程序我印象中好像做过Matlab/Simulink和AMEsim联合仿......
  • 基于Node.js+vue基于Springboot的漫画网站(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字娱乐已成为人们日常生活中不可或缺的一部分,其中漫画作为一种独特的视觉艺术形式,深受全球读者的喜爱。然而,传统的漫画阅读方式......
  • 基于Node.js+vue基于Springboot的校园单车租赁系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着绿色出行理念的深入人心及校园规模的日益扩大,传统步行或私家车出行方式已难以满足师生们对高效、便捷、环保出行方式的需求。校园单车租赁系统应运而生,......
  • 基于Node.js+vue基于springboot的汽车配件管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着汽车行业的迅猛发展,汽车配件的管理变得日益复杂和重要。传统的配件管理方式往往依赖于手工记录和纸质档案,不仅效率低下且容易出错,难以适应现代企业的快......
  • 基于Node.js+vue基于JavaWeb的在线英语学习管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着全球化进程的加速和互联网技术的飞速发展,英语作为国际通用语言的重要性日益凸显。然而,传统英语学习方式受限于时间、地点及教学资源等因素,难以满足广大......
  • 【Unity必备插件】NGUI:UI设计传奇工具
    ......
  • Camunda Modeler流程设计器
    1、介绍任何可执行流程都需要预先设计和配置业务流程模型和BPMN图,BPMN图可以让使用者更容易理解流程的结构,CamundaModeler是一个可视化设计和实现BPMN图表的工具。下面是官方使用文档:1、Modeler中绘制BPMN介绍2、桌面版Modeler使用介绍2、相关概念可以将BPMN的绘制类比于我......
  • Python毕业设计基于Django的图书借阅系统的设计与实现(源码+LW+部署讲解)
    文末获取资源,收藏关注不迷路文章目录一、项目介绍二、主要使用技术三、研究内容四、核心代码五、文章目录一、项目介绍本“期待相遇”图书借阅系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了......
  • springboot+vue英语四六级单词学习系统【程序+论文+开题】计算机毕业设计
    系统程序文件列表开题报告内容研究背景在全球化日益加深的今天,英语作为国际通用语言的重要性不言而喻。对于广大中国学生来说,英语四六级考试不仅是衡量其英语水平的重要标尺,也是升学、就业不可或缺的敲门砖。然而,词汇作为语言学习的基础,往往是考生们备考路上的最大障碍。传......
  • springboot+vue水果销售系统【程序+论文+开题】计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着现代科技的飞速发展和消费者购物习惯的不断变化,传统水果销售模式正面临着前所未有的挑战与机遇。传统市场受限于地理位置、信息不对称及库存管理不善等问题,难以满足消费者日益增长的多元化、便捷化需求。与此同时,电子商务的兴起为......