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

P1561 [USACO12JAN] Mountain Climbing S

Solution

简单看题容易得到一个错误的贪心:

\[ans=max\{\Sigma_{k=1}^n + down_{min}, \Sigma_{k=1}^n +up_{min}\} \]

然后你将可以把他 hack 掉,因为最初的方法认为第一个牛上山后,所有上下山是一起进行的,其实有可能出现不重叠的情况,于是少算了。

那么接下来就是正确的贪心方式:

  1. 可以分为两大类的奶牛,U > D 和 D > U

  2. 排序方式:

    · 第一类在第二类前面

    · 第一类中,按照U的升序排列

    · 第二类中,按照D的降序排列

  3. 模拟即可

容易发现,第一类在第二类前面,而且U升序,接下来看第二类,下山慢的牛可以拖时间使得山顶没有牛而导致的浪费用时。

Code

#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
using namespace std;
typedef long long ll;
struct node
{int x, y;
};
vector<node> cow;
node tmp;
bool cmp(node a, node b)
{if(a.x < a.y){if(b.x < b.y) return a.x < b.x;return true;}if(b.x >= b.y) return a.y > b.y;return false;
}
int n, up[25005], dwn[25005];
int main()
{IOS;cin >> n;for(int i = 1; i <= n; i ++) cin >> tmp.x >> tmp.y, cow.push_back(tmp);sort(cow.begin(), cow.end(), cmp);for(int i = 1; i <= n; i ++) up[i] = up[i - 1] + cow[i - 1].x;for(int i = 1; i <= n; i ++) dwn[i] = max(dwn[i - 1], up[i]) + cow[i - 1].y;cout << dwn[n];return 0;
}
http://www.gsyq.cn/news/33280.html

相关文章:

  • 以此贴作别算法
  • 正点原子--手把手教你轻松入门C语言及STM32
  • 【RabbitMQ】与ASP.NET Core集成
  • IMO2025 Problem 1
  • Java流程控制——switch多选择结构
  • P3607 [USACO17JAN] Subsequence Reversal P 题解
  • 随笔/杂记
  • 使用 Swift 解析验证码(结合 Tesseract OCR)
  • 常见排序算法Java实现
  • 175天 隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线
  • link元素的用法及HTML样板
  • 10月28号
  • https://avoid.overfit.cn/post/44c8d547475340d59aa4480f634ea67f
  • Day 18
  • STM32之fromelf生成bin和反汇编文件
  • 常用存储器介绍
  • P11307 [COTS 2016] 建造费 Pristojba 分析
  • 乱学点东西#2 :菠萝/蓝莓/Boruvka算法
  • 文件清理,推荐几款常用软件
  • 【学习笔记】数据结构全家桶
  • 零散点小总结(25.10.28)
  • Top Tree大学习
  • EVE-NG导入华为等镜像的方法
  • 2025 云斗
  • c++ ranges随笔
  • P10259 [COCI 2023/2024 #5] Piratski kod
  • 软考复习总结
  • ? #6
  • 集训做题杂记1 - -MornStar
  • 2019 福建省队集训录