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

[POI 2004] MOS

一道很有意思的贪心题,似乎noi导刊上有?记不太清了,反正是做出来了。

题意

有一个桥,一个火把,一堆人。

这对人要过桥,过桥有一些条件。

  • 需要过桥的人有火把

  • 不可同时过两个以上

每次过桥的花费时间是两人中花费最高的那位。

询问最小的过桥花费。

注意,火把是必须有人带回的,这个火把不能凭空传送。

解法

这个其实并不难,我们发现 \(n\) 为 1, 2, 3 时的都很简单,我们从简单处入手。

对于 \(n=1\)

对于 \(n=2\)

对于 \(n=3\) 我们让最快的人分别带人过去再返回送火把,答案是所有人的花费之和。

但是对于 \(n>3\) 这个并不一定是正确的策略,我们但从这一次进行考虑这个确实是最优的,但是我们不能排除因为顺序而导致的不同。

比如有两个接近无限的数,这两个明显一起过更好,如果使用最快一个一个接明显不妥当。

所以我们多了一种策略,让最慢和次慢同行,显然最慢和次次慢更劣。

具体来讲第二种策略,我们让最快和次快先过,最快回来送火把,最慢和次慢过去,次快回来送火把。

这两种策略我们并不知道什么时候使用,所以直接 dp。

代码

#include <bits/stdc++.h>
using namespace std;
const int MN=1e6+116;
int n, a[MN], dp[MN];
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n; for(int i=1; i<=n; ++i) cin>>a[i];dp[n]=a[n]+a[1];if(n==1){cout<<a[1]<<'\n';return 0;}for(int i=n-1; i; --i)dp[i]=min(a[i]+a[1]+dp[i+1],a[i+1]+a[2]+a[2]+a[1]+dp[i+2]);cout<<dp[3]+a[2]<<'\n';return 0;
}
http://www.gsyq.cn/news/9139.html

相关文章:

  • AI 在教育领域的落地困境:个性化教学与资料隐私的平衡之道
  • 2025-06-10.购买联想thinkpad 16p
  • MySQL的Schema是什么? - 公众号
  • 推动安全研究多元化的10万美元捐赠计划
  • 20250919
  • 完整教程:AI+虚拟仿真开启材料工程专业学习与实践新篇章
  • [NOIP2022] 建造军营 解题报告
  • 123213123
  • ​​[硬件电路-240]:为什么高频信号的电路的处理难度要比直流信号、电频信号处理的难度倍增? - 指南
  • 实用指南:EasyCVR在智慧城市中场景中的核心应用与实践方案
  • 03_Angular的突破性优势
  • 02_Angular现代前端框架的选型逻辑
  • 一堆杂题混刷
  • 2025 CCPC 网络赛
  • 博客园插入bilibili视频
  • 大学园区二手书交易强大的平台(代码+数据库+LW)
  • 课前问题思考3
  • go静态方法
  • 在Linux环境下安装和卸载DMETL5数据迁移工具
  • react工程化
  • go语言中的数组类型
  • NOIP 模拟赛九
  • 个人项目-软件工程第二次作业 - Nyanya-
  • go语言中的复杂数据类型
  • 支持 SSL 中等强度密码组(SWEET32) - 漏洞检查与修复
  • linux kernel synchronization rcu
  • Android开发参考
  • Transformer与ViT
  • WordPress开放嵌入自动发现功能中的XSS漏洞分析
  • Python lambda