论何来的贪心
2026-02-22 16:46:28
发布于:广东
6阅读
0回复
0点赞
很好,经过一番花里胡哨的代码终于AC了,真没看出和贪心有什么直接联系。
首先我们来看数据范围,发现,怎么暴力都可以过,但是我手贱,所以代码里出现了前缀和+二分。如果你看不懂,下面有逐步注释。
代码在这里:
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[105];
bool cmp(int x,int y){//从大到小排序才能求最优解,优先找时间长的
return x>y;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1,cmp);//费老大劲发现最费时的步骤竟然是O(nlogn)的排序
for(int i=1;i<=n;i++) a[i]+=a[i-1];//最基本的前缀和
int l=1,r=n,mid;
while(l<r){//二分答案
mid=(l+r)>>1;
if(a[mid]>a[n]-a[mid]) r=mid;//后半部分不含中间值,无减1
else l=mid+1;
}
cout<<l;//写mid可能没更新
return 0;
}
这里空空如也
有帮助,赞一个