求时间复杂度(代码附上)
查看原帖
求时间复杂度(代码附上)
490694
Compound_Interest楼主2022/8/17 11:08
#include<cstdio>
#include<set>
#include<algorithm>
#define int long long
using namespace std;
const int maxn=10010;
multiset<int>s;
int n,k,a[maxn],ans=0x3f3f3f3f,now;
signed main(){
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=k;i++) scanf("%lld",&a[i]),s.insert(a[i]),now+=a[i];
	while(now<ans){
		if(s.size()==n) ans=min(ans,now);
		auto it=s.begin();
		int tmp=*it; 
		s.erase(it),now-=*it;
		for(int i=1;i<=k;i++) s.insert(a[i]+tmp),now+=a[i]+tmp;
		while(s.size()>n) now-=*(--s.end()),s.erase(--s.end());
	}
	printf("%lld",ans);
	return 0;
}

这题经历了多次迭代,每次最坏nlogn求总时间复杂度

2022/8/17 11:08
加载中...