当前位置: 首页 > 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.fuzeviewer.com/news/1581/

相关文章:

  • 五、阅读笔记五 应对复杂系统的挑战
  • Day6综合案例2-注册信息
  • 2014吉林省赛题解 | CCUT应用OJ——Sign in
  • P3607 [USACO17JAN] Subsequence Reversal P 题解
  • 10/28
  • URL验证绕过速查表:全面解析SSRF与CORS绕过技术
  • 2025年河南工业大学2025新生周赛(1)
  • CF506E Mr. Kitayutas Gift
  • 2025.10.28
  • MyBatis 动态 SQL 实现原理 - Higurashi
  • 最小二乘问题详解6:梯度下降法
  • 现代C++编程初体验
  • Python冒泡排序:简单易懂的算法实现
  • 集训做题杂记1 - -MornStar
  • CF1909I Short Permutation Problem
  • ROS1 go2 vlp16 局部避障--3 篇 - 教程
  • CSP-S模拟41
  • 禁用 IPython 历史记录 history.sqlite
  • 实验二 现代C++编程初体验
  • 周康阳精选冲刺省选国赛思维训练题
  • P3939 数颜色
  • 2025年压力容器厂家综合评测与选择指南
  • 项目构建优化:Make 与 Makefile
  • 11hhs
  • 在vue-markdown-render中解析LaTeX公式
  • CSP-S NOIP 2025 备考
  • ICPC Nanjing Regional (部分题题解)
  • 分布式锁巅峰对决:Redis RedLock vs ZooKeeper临时节点——Redission看门狗如何破解续期困局 - 教程
  • MySQL 数据加密整改文档(TDE + 字段加密 + 密码哈希)
  • 2025年火锅底料工厂厂家权威推荐榜单:袋装火锅底料/餐饮火锅底料/企业火锅底料源头厂家精选