当前位置: 首页 > 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/a/313655.html

相关文章:

  • libcurl.net入门使用
  • 《MYSQL45讲》kill不掉的线程
  • pip3 install -e .[stable]讲解
  • activiti5基础和springboot整合
  • RoseTTAFold MSA_emb类解读
  • 第二节 OSI-物理层
  • 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语言中的锁有哪些?