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

P1809 过河问题(贪心解法讲解)

前言

这是题目

看起来是不是非常简单^~^

可它居然有绿!!!

我感觉很高(花了30多分钟写贪心解法)

OK 接下来我们开始讲解

讲解

先看代码

#include <bits/stdc++.h> using namespace std; int a[100005]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } int s=0; sort(a+1,a+n+1); while(n>=4){ if(2*a[2]+a[1]+a[n]>=2*a[1]+a[n-1]+a[n]){ s+=a[1]*2+a[n-1]+a[n]; } else{ s+=a[2]*2+a[1]+a[n]; } n-=2; } if(n==1){ s+=a[1]; } if(n==2){ s+=max(a[1],a[2]); } if(n==3){ s+=a[1]+a[2]+a[3]; } cout<<s; return 0; }

分析

有 N 个人要过河,船每次最多载 2 人,过河时间由船上较慢的人决定。目标是找到所有人过河的最短总时间。

思路

将所有人按过河时间从小到大排序后,考虑每次送最慢的两个人过河。有两种策略:

  1. 策略A:最快的两个人先过河,最快的回来,最慢的两个人过河,次快的回来
    • 时间 = a[1] + 2*a[2] + a[n]
  2. 策略B:最快和最慢的先过河,最快的回来,最快和次慢的过河,最快的回来
    • 时间 = 2*a[1] + a[n-1] + a[n]

解析

  1. 排序sort(a+1,a+n+1)将时间从小到大排序
  2. 主循环while(n>=4)当人数≥4时,每次送2人过河
    • 比较两种策略的时间消耗,选择较小的
    • if(2*a[2]+a[1]+a[n]>=2*a[1]+a[n-1]+a[n])
    • 如果策略A≥策略B,选择策略B,否则选择策略A
    • 每次循环 n-=2(送走2人)
  3. 剩余情况处理
    • n==1:只剩1人,直接过河(其实这个可以不写)
    • n==2:2人一起过河,取较慢的时间
    • n==3:3人一起过河(最快的来回接送)

结尾

相信你一定听懂了

bye bye

http://www.jsqmd.com/news/1297418/

相关文章:

  • 如何用Apollo Save Tool成为PS4存档管理大师:新手完全指南
  • 中文论文英译润色全流程:从逻辑结构到地道表达实战指南
  • 开源大模型新标杆:Kimi K3 发布,MoE 架构 2.8 万亿参数 + 百万级上下文
  • P12138 [蓝桥杯 2025 省 A] 寻找质数
  • Agentic AI 看起来很能打,为什么一进真实项目就容易失控?
  • AT24C02 EEPROM应用指南:I2C协议、驱动代码与硬件设计详解
  • 深入解析MOS管开通过程:从寄生电容到驱动设计实战
  • AscendCL图像分类开发:从模型转换到性能优化实战
  • Solaar:Linux上最强大的罗技设备管理工具终极指南
  • 2026 年当下,合阳专业的抽沙泵制造企业哪家好,河道清淤效率翻3倍的工业神器,这台大家伙到底藏着什么黑科技?-广汇水泵 - 领域鉴赏官
  • COMSOL仿真在含水煤层瓦斯抽采中的应用与优化
  • 2026年 清洗剂/白电油/天那水/异丙醇/醋酯乙酯厂家推荐榜:工业去污与环保高效的源头优选品牌解析 - 优企名品
  • 新手友好!DeepSeek本地部署实战,实现数据本地可控
  • 终极指南:如何在电脑上免费畅玩Switch游戏?Ryujinx模拟器完整解决方案
  • STM32从零到量产开发:四路继电器工业控制模块开发-RS485 半双工通信底层驱动模块(bsp_res485)设计说明
  • 和利时DCS 6.5.4系统下装故障排查与解决方案
  • 邵阳vi设计机构有哪些 行业机构分布与选择要点科普解读
  • 华为MetaERP Oracle EBS FA 与 Oracle Fusion FA 固定资产模块业务场景及会计分录对比一、整体架构差异概览表格维度 Oracle EBS FA Oracle F
  • 基于微信小程序的老年人健康管理平台的设计与实现
  • JAVA+Agent学习day24
  • 20-上下文文件-每个项目的专属指南
  • 2026年物业电梯能量回馈装置厂家推荐,看看有哪些好选择? - 品牌排行榜
  • 一站式解决Windows DLL缺失:VC++运行库实战包部署与排错指南
  • YimMenu终极指南:GTA5防崩溃保护与游戏体验全面增强
  • 2026年杭州小红书运营专业公司推荐:助力企业在小红书平台脱颖而出 - 品牌排行榜
  • Visual Studio配置C++14开发环境:从版本检查到项目设置全攻略
  • 3分钟快速上手:OpenUtau开源虚拟歌手编辑器的完整使用指南
  • VMware虚拟机安装Ubuntu完整指南:从零配置到高效管理
  • 从VMware Workstation迁移到ESXi 7.0:突破虚拟机数量限制的实战指南
  • 网安哪些岗位容易年薪百万?盘点 5 大核心赚钱方向,附学习路线图