K. GCD of Set

  • 贪心。猜测最优方案一定可以满足至多只有一个集合的大小不为1
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int a[1000005];
int cnt[1000005];
vector<int>c[1000005];
vector<long long>s[1000005];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int n,k;
		cin>>n>>k;
		int maxn=0;
		long long sum=0,ans=0;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];	
			cnt[a[i]]++;
			maxn=max(maxn,a[i]);
			sum+=a[i];
		}
		for(int i=1;i<=maxn;i++)
		{
			for(int j=i;j<=maxn;j+=i)
			{
				for(int k=1;k<=cnt[j];k++)
				{
					c[i].push_back(j);
					if(s[i].empty())
					{
						s[i].push_back(j);
					}
					else
					{
						s[i].push_back(s[i].back()+j);
					}
				}
			}
		}
		for(int i=1;i<=maxn;i++)
		{
			if(c[i].size()&&c[i].size()+k-1>=n)
			{
				ans=max(ans,sum-s[i][n-k]+i);
			}
		}
		cout<<ans<<"\n";
		for(int i=1;i<=maxn;i++)
		{
			c[i].clear();
			s[i].clear();
			cnt[i]=0;
		}
	} 
	return 0;
}
posted @ 2025-01-19 19:01  D06  阅读(11)  评论(0)    收藏  举报
//雪花飘落效果