码迷,mamicode.com
首页 > 其他好文 > 详细

NOIP2013积木大赛 [贪心]

时间:2018-02-13 10:27:34      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:ret   isp   std   bsp   none   ios   view   多个   closed   

大意

自己查去...

说明

这道题正解是贪心,但标程里是有这样一句话的:把序列分成(a1,..ai)(ai+1,...aj)......(ak,...an)多个非递减序列。然后所有段中最大值的和减去除第一段外的段的最小值

是否太诡异了呢

于是本oier决定来一个较详细的解析,我们从样例出发

技术分享图片

我们会想到先把2层的建好

技术分享图片而下一个是3层的,为了使得区间数最小,我们就把2层时建的区间延伸过去技术分享图片

但三层不够于是单键一层技术分享图片

 

 而后面的放置类似的技术分享图片

观察延伸的过程

当后一个比前一个大时,前一个的区间覆盖不到后一个 答案必须要加上后一个比前一个多的。

当后一个比前一个少时,之前的区间一定可以延伸出去覆盖到它,所以答案只加后一个比前一个大的数。

代码在此

技术分享图片
#include<iostream>
#include<cstdio>
using namespace std;
int n,x,p,ans;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        int k=x-p;
        if(k>0)ans+=k;
        p=x;
    }
    cout<<ans<<endl;
    return 0;
}
View Code

 

NOIP2013积木大赛 [贪心]

标签:ret   isp   std   bsp   none   ios   view   多个   closed   

原文地址:https://www.cnblogs.com/66t6/p/8445979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!