csu 1578 Opening Ceremony (递推 )

题意:有一个排n个建筑 每个高不定 现在要消去全部建筑

        方法有两种 1 消去高度为某值的全部方块

                       2 消去一整个建筑

        问 如何通过最少步骤消去

思路:首先将数组从大到小排序

        

     if(i+a[i]<ans) ans=i+a[i];

 

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

int a[1000000+100];

int cmp(int a,int b)

{

    return a>b;

}

int main()

{

    int n;

    int i,j,k;

    while(scanf("%d",&n)!=EOF)

    {

        int ans;

        for(i=0;i<n;i++) scanf("%d",&a[i]);

        sort(a,a+n,cmp);

        ans=a[0];

        //printf("%d\n",ans);

        for(i=1;i<n;i++)

        {

            if(i+a[i]<ans) ans=i+a[i];

        }

        if(ans>n) ans=n;

        printf("%d\n",ans);

    }

    return 0;

}

  

你可能感兴趣的:(open)