luogu2242 公路维修问题
2024-10-01 06:30:00
题目大意
把一个高速公路看作由连续排列的一个个格子组成,有n个格子上有坑。给出m,要求出m段区间,使得这m区间覆盖到所有坑(交通管制),且占据的格子数量最少。输出占据的格子数。
题解
换个角度看问题。因为正常通行的路段上没有坑,故想到原题相当于求m-1个没有坑的区间,求这些区间占据格子数的最大值。把两两坑间隔求出来,从大到小排序,选出前面m-1个间隔值,再有总区间长度减去它即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <iostream>
using namespace std;
const int MAX_POS_CNT = 15010;
#define ll long long
ll Poss[MAX_POS_CNT], Delta[MAX_POS_CNT];
bool cmp(ll a, ll b)
{
return a > b;
}
int main()
{
ll n, m;
ll ans = 0;
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%lld", Poss + i);
Poss[0] = Poss[1];
for (int i = 1; i <= n; i++)
{
Delta[i] = Poss[i] - Poss[i - 1] - 1;
ans += Poss[i] - Poss[i - 1];
}
ans++;
sort(Delta + 1, Delta + n + 1, cmp);
for (int i = 1; i <= m - 1; i++)
ans = ans - Delta[i];
cout << ans << endl;
}
最新文章
- Postgresql 导出表结构信息
- 宁波uber优歩司机注册教程 UBER宁波司机注册指南!
- 0016 Java学习笔记-异常-如果try-catch-finally中都存在return语句会怎样?
- linux驱动初探之字符驱动
- 《Java中的单例模式--两种》
- Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
- paper 3:matlab中save,load使用方法小结
- poj2194Stacking Cylinders
- Appium —— desired_capabilities详解
- 【原创】ZOJ_1649 Rescue 解题报告
- PPT素才搜索简谈
- 异步解决方案promise及源码实现
- 可持久化线段树——区间更新hdu4348
- [20190306]共享服务模式与SDU.txt
- day 7-11 初识MySQL数据库及安装密码设置破解
- 新浪天气api
- django ---forms组件
- Object-c中的单例
- Loararunner录制脚本
- 第5课 Qt Creator工程介绍