您的位置:首页 > 大数据 > 人工智能

【贪心】【codeforces】651B Beautiful Paintings

2016-03-30 10:24 423 查看
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=336201

有n幅画要展览,每一幅画都有一个美丽度,一个人看展览的时候如果现在看的这幅画比前一幅画的美丽度高,他就会高兴一次

问怎么排列这些画让那个参观的人高兴的次数最多

如果这n幅画都是从小到大排列,那么这个人就能高兴n-1次,但是会出现问题的地方就是如果有几幅画的美丽度是相同的,就不能这样单纯的排序。

但是如果让每幅画都不相同,多余1的美丽度相同的画被挑出来重新排序,直到每个美丽度只有1幅画,就可以得到答案。

最开始输入的时候将每幅画的美丽度扔到一个桶里

从小到大依次将大于等于1的x个桶中的画-1,得到x-1个高兴次数

重复上一个过程直到将桶中的画全部取出

#include<bits/stdc++.h>
using namespace std;

int a[1005];

int main(){
int n;
while(~scanf("%d", &n)){
memset(a, 0, sizeof(a));
for(int i = 0; i < n; i++){
int temp;
scanf("%d", &temp);
a[temp]++;
}
int ans = 0;
for(int i = 0; i < 1005; i++){
int n = 0;
for(int j = 0; j < 1005; j++){
if(a[j] > 0){
a[j]--;
n++;
}
}
if(n > 1) ans += n-1;
else if(n == 0) break;
}
printf("%d\n", ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: