题意:给你一个序列,如果这个数比他前面所有数字的总和大于等于,那么他就是开心的,否则就是不开心,让你重新更改顺序,使开心的人最多
题解:首先,排序,对于开心的,留下来,不开心的,扔到最后,这还可能使后面开心的变多。
int a[100010];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
LL sum=0;
int ans=0;
for(int i=0;i<n;i++){
if(sum<=a[i]){
sum+=a[i];
ans++;
}
}
cout<<ans<<endl;
return 0;
}

本文介绍了一种通过排序和特定条件筛选来最大化序列中“开心”元素数量的算法。算法首先对输入序列进行排序,然后从前往后遍历,根据累积和与当前元素的比较结果决定是否将该元素计入“开心”的总数。
403

被折叠的 条评论
为什么被折叠?



