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

小叶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 10out:
17
*/





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

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

http://www.lryc.cn/news/439069.html

相关文章:

  • LeetCode509:斐波那契数列
  • 5G前传-介绍
  • 【Python机器学习】循环神经网络(RNN)——超参数
  • 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树
  • Node.js的学习2——内置模块(一)
  • 信息安全工程师(5)域名与域名解析
  • idear导入他人项目如何快速运行
  • 直流无刷电机霍尔线序自学习解释
  • C++学习笔记(26)
  • 安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制
  • 华为CNA VRM搭建(使用vmware worfstartion搭建)
  • 【WRF工具】WRF Domain Wizard第二期:使用教程
  • 智能摄像头MP4格式化恢复方法
  • 【C++】unordered系列
  • Cobbler 搭建方法
  • 从边缘到云端,合宙DTURTU打造无缝物联网解决方案
  • 【Android Studio】API 29(即Android 10)或更高版本,在程序启动时检查相机权限,并在未获取该权限时请求它
  • 【裸机装机系列】3.kali(ubuntu)-更新sources.list并重启
  • text2sql(NL2Sql)综述《The Dawn of Natural Language to SQL: Are We Fully Ready?》
  • 【滑动窗口】一题讲透滑动窗口!
  • 嵌入式通信原理—SPI总线通信原理与应用
  • 基于web的 BBS论坛管理系统设计与实现
  • 【Scala入门学习】Scala的方法和函数
  • 【JVM】概述
  • 鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值
  • clip论文阅读(Learning Transferable Visual Models From Natural Language Supervision)
  • 用于图像分割的协 SMA Transformer:同多注意力转换器 !
  • lodash中_.difference如何过滤数组
  • 关于C# 数据库访问 转为 C++ CLI 数据库访问
  • 百度移动刷下拉词工具:快速出下拉词的技术分析