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

相关文章:

  • 六、阅读笔记六:保障软件可靠性的防线
  • 五、阅读笔记五 应对复杂系统的挑战
  • P3988 [SHOI2013] 发牌
  • 映射
  • 文件夹显示绿色成功图标方法
  • 正点原子--手把手教你轻松入门C语言及STM32
  • 【RabbitMQ】与ASP.NET Core集成
  • IMO2025 Problem 1
  • Day6综合案例2-注册信息
  • 2014吉林省赛题解 | CCUT应用OJ——Sign in
  • 访答知识库-可以本地使用的知识库
  • 代码大全2 第三四章
  • https代理服务器(六)再次java动态签发【成功】
  • node
  • [AGC032D] Rotation Sort 题解
  • [AGC024E] Sequence Growing Hard 题解
  • 实验2 现代C++编程初体验
  • P7154 [USACO20DEC] Sleeping Cows P 题解
  • Java流程控制——switch多选择结构
  • P3607 [USACO17JAN] Subsequence Reversal P 题解
  • 概率论测试(上)
  • 示性函数2
  • 随笔/杂记
  • k3s 基础 —— 将 traefik 替换为 ingress-nginx
  • 使用 Swift 解析验证码(结合 Tesseract OCR)
  • 常见排序算法Java实现
  • 题解:qoj1875 Nein
  • 【uni-app】申请高德地图key,封装map.js,实现H5、iOS、Android通过getlocation获取地图定位信息(摘)
  • .NET开发上手Microsoft Agent Framework(一)从开发一个AI美女聊天群组开始
  • java作业4