当前位置: 首页 > article >正文

小叶OJ 2716: 过河问题 ← 贪心算法

【题目来源】
http://xiaoye.ac.cn/problem.php?id=2716

【题目描述】
有 n 个人要渡河,但只有一条小船,这条小船一次只能坐下最多两个人,并且只有一副船桨。每个人划船的速度不一样,如果两个人一起上船,由于重量变大,划船的速度相当于是划船速度最慢的那个人速度。假设给出每个人单独划船过河所花费的时间 Ti,请问所有人都过河的总时间最短的时间?

【输入格式】
输入两行,第一行是一个整数,表示要过河的 n 个人。
第二行,是 n 个整数,按速度从快到慢排序好的每个人划船过河的时间。

【输出格式】
输出一行,给出所有人过河所花费最短的时间。

【输入样例】
4
1 2 5 10

【输出样例】
17

【算法分析】
● 将各个过河时间从小到大排序并存在数组 a 中,当 n≥4 时,过河方案为:
方案一:
最快的和次快的过河,然后最快的回来,再次慢的和最慢的过河,然后次快的回来。时间为 a[1]+2*a[2]+a[n]
方案二:
最快的和最慢的过河,然后最快的回来,再最快的和次慢的过河,然后最快的回来。时间为 2*a[1]+a[n-1]+a[n]
根据比较结果,将所选方案的时间累加到总时间 s 中,并将人数 n 减少 2,因为每次循环处理了两个人过河。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin>>n;
    int a[n+5];

    for(int i=1; i<=n; i++) cin>>a[i];
    sort(a+1,a+n+1);

    int s=0;
    while(n>=4) {
        if(2*a[1]+a[n-1]+a[n]>2*a[2]+a[1]+a[n]) {
            s+=2*a[2]+a[1]+a[n];
        } else s+=2*a[1]+a[n-1]+a[n];
        n-=2;
    }

    if(n==3) s+=a[1]+a[2]+a[3];
    else if(n==2) s+=a[2];
    else s+=a[1];

    cout<<s<<endl;

    return 0;
}

/*
in:
4
1 2 5 10

out:
17
*/





【参考文献】
https://blog.csdn.net/u013596478/article/details/105016223

https://mp.weixin.qq.com/s/a9Y2YTpjjmdv2JzI3EtAVw


http://www.kler.cn/news/313655.html

相关文章:

  • Liveweb视频汇聚平台支持GB28181转RTMP、HLS、RTSP、FLV格式播放方案
  • nodejs 013:Prect 样式复用(multiple classes)例子
  • yolo自动化项目实例解析(二)ui页面整理 1.78
  • macOS Sequoia 正式版(24A335)黑苹果/Mac/虚拟机系统镜像
  • 2024华为杯E题:高速公路应急车道紧急启用模型
  • Broadcast:Android中实现组件及进程间通信
  • 使用 Anaconda 环境在Jupyter和PyCharm 中进行开发
  • 【计算机网络】网络层协议解析
  • NVM(node.js版本工具)的使用
  • 虚拟机ens33网卡不显示inet地址(已设置NOBOOT为yes)
  • 蓝桥杯2024省C
  • IDEA 2024.3 EAP新特征早览!
  • 音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析
  • 微信小程序05-常用API下
  • EmguCV学习笔记 VB.Net 12.2 WeChatQRCode
  • 【FPGA】编程方式
  • Django学习实战篇六(适合略有基础的新手小白学习)(从0开发项目)
  • AUTOSAR_EXP_ARAComAPI的5章笔记(7)
  • iPhone 16系列:摄影艺术的全新演绎,探索影像新境界
  • Java面试篇基础部分-Java语言中的锁有哪些?
  • 基于SpringBoot+Vue的图书管理系统
  • 【设计模式-备忘录】
  • 计算机网络 ---- OSI参考模型TCP/IP模型
  • Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED
  • RabbitMQ消息转换器
  • 一条sql是如何执行的详解
  • Win10 安装Node.js 以及 Vue项目的创建
  • 构建现代应用的Python Serverless架构详解
  • Python中 BeautifulSoup和Selenium 定位元素和获取元素值的方法
  • 【JAVA入门】Day48 - 线程池