NOIP2013积木大赛 [贪心]

Posted 66t6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP2013积木大赛 [贪心]相关的知识,希望对你有一定的参考价值。

大意

自己查去...

说明

这道题正解是贪心,但标程里是有这样一句话的:把序列分成(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积木大赛 [贪心]的主要内容,如果未能解决你的问题,请参考以下文章

NOIP 2013 day2

[NOIP2013]积木大赛

Noip 2013 Day2 T1 积木大赛(block)

Noip2013 提高组 积木大赛

p1440积木大赛[noip2013]

noip2013——提高组——积木大赛