NOIP2018&2013提高组T1暨洛谷P5019 铺设道路

mac2022-06-30  101

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

花絮:普及蒟蒻终于A了一道提高的题目?emm,写一篇题解纪念一下吧。求过!

分析:

这道题我们可以采用一种略带数学&贪心的思想来解决,其实也可以使用差分,但并没有必要了。因为任何一个点都可以单独减1。

我们可以遍历每个点,然后发现当后一个点b的值大于前一个点的值时,我们需要把b减去前面的那个值(或再之前的),来实现最优解。

因为我们发现,要最短的天数就必须每天最长的修理距离,最长的修理距离也就是要保证前几天施完工后给这一天留下的最长。

然后问题差不多就解决了。

如有问题,欢迎私信讨论。

放代码

代码:

#include<cstdio> using namespace std; int a[100005]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int ans=0,tmp=0,last=0; for(int i=1;i<=n;i++) { if(a[i]>a[i-1]) { ans+=tmp-last; tmp=a[i]; last=a[i-1]; } } ans+=tmp-last; printf("%d",ans); return 0; }

转载于:https://www.cnblogs.com/vercont/p/10210048.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)