1. 程式人生 > >Codeforces Round #523 (Div. 2)B. Views Matter(思維+貪心)

Codeforces Round #523 (Div. 2)B. Views Matter(思維+貪心)

傳送門

題意:有一堆塊,第i塊的高度是ai,有一個從上面看到的俯檢視,有一個從右面看到的側檢視,現在問從原來的堆中至多取出多少個塊保持俯檢視和側檢視不變,有兩個規定是這樣的,第一個就是物塊不受重力影響,就是說從下面掏出塊上面的不會掉落的意思,第二個是不能用手移動塊。

思路:全部累加 減去 n 個底部的 1(俯檢視),減去最高的 a[n](側檢視),再一個一個從俯視圖裡能否貢獻一個高度到側檢視上

#include<cstdio>
#include<algorithm>
using namespace std;
long long n,m,a[100010],ans,now=1;
int main()
{
    scanf("%I64d%I64d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%I64d",&a[i]);
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++)
        {
            ans+=a[i];
        }
        for(int i=2;i<=n;i++)
        {
            if(a[i]>now)now++;//貢獻到側檢視
        }
        ans-=(n+(a[n]-now));
        printf("%I64d",ans);
        return 0;
}