博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P5019 铺设道路(差分)
阅读量:4634 次
发布时间:2019-06-09

本文共 739 字,大约阅读时间需要 2 分钟。

嗯...

 

题目链接:https://www.luogu.org/problem/P5019

 

首先简化一下题意:

给定一个长为N的数组,每次操作可以选择一个区间减去1,问最少多少次操作可以将数组中的数全变成0 N≤100000

 

思路:

首先对于第一个数字d_1我们至少需要在上面花d_i次,然后考虑每一个d_i,对于它比上一个数字小(或等于)的那一部分,

我们可以在对上一个数字操作时一块操作。如果d_i > d_i - 1,也就是说它比上一个数大,那么我们就必须多进行d_i - d_i - 1次操作。

很明显,数与数之间会有差,而差会造成一些区间问题,所以这道题的正解是差分...

我们用b数组维护差分,然后将大于0的差分数组加到ans中即可。

 

AC代码:

1 #include
2 #include
3 4 using namespace std; 5 6 int ans, d[100005], b; 7 8 int main(){ 9 int n;10 scanf("%d", &n);11 for(int i = 1; i <= n; i++){12 scanf("%d", &d[i]);13 b = d[i] - d[i - 1];14 if(b > 0) ans += b;15 }16 printf("%d", ans);17 return 0;18 }19
AC代码

 

转载于:https://www.cnblogs.com/New-ljx/p/11267087.html

你可能感兴趣的文章
简单入门dos程序
查看>>
linux下occi操作oracle数据库,中文乱码的问题
查看>>
JS原型与原型链
查看>>
SVG.js 笔记 (一)
查看>>
struts2笔记01-环境搭建
查看>>
appium 控件定位
查看>>
oracle sql 获取本季度所有月份,上季度所有月份
查看>>
VUE的组件DEMO
查看>>
xshell连接Linux、ngix部署
查看>>
XCODE 6.1.1 配置GLFW
查看>>
vue element 关闭当前tab 跳转到上一路由
查看>>
4、面向对象
查看>>
[NOI2005]聪聪与可可(期望dp)
查看>>
POJ 3723
查看>>
解决sql2014的distribution系统库distribution.mdf过大问题
查看>>
Maven的安装
查看>>
angular初步认识一
查看>>
springmvc3.2+spring+hibernate4全注解方式整合(一)
查看>>
Elgg网站迁移指南
查看>>
素数筛法优化
查看>>