您的位置:首页 > 运维架构

Sicily 13910. Opening Ceremony

2015-03-29 23:50 232 查看
贪心算法:比较底部可以消去一行的个数和最高塔那个多,消去多的那个,数据有点多,用c输入比较好

#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

int arr[1000000];

int main()
{
int n;
scanf("%d",&n);
for(int i=0; i < n; ++i)
scanf("%d",&arr[i]);

sort(arr,arr+n);

int max_high=n-1,count=0;
int nozero=-1;
while(true){
if(arr[max_high] >= max_high-nozero+1){
arr[max_high]=0;
max_high--;
count++;
}
else{
bool check=false;
for(int i=0; i <= max_high; ++i){
arr[i]--;
if(arr[i]>0&&check==false){
check=true;
nozero=i;
}
}
count++;
}
int k;
for(k=0; k < n; ++k){
if(arr[k] > 0) break;
}
if(k == n) break;
}
printf("%d\n",count);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: