RT,我自己也想不明白,本地拍小数据也都过了。
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <map>
#include <cstdlib>
#include <deque>
#define int long long
using namespace std;
int rd() {
int sum=0,f=1; char ch=getchar();
while(!isdigit(ch)) {
if(ch=='-') f=-1; ch=getchar();
}
while(isdigit(ch)) sum=sum*10+ch-'0',ch=getchar();
return sum*f;
}
#define N (int)(3e5+5)
int n,a[N],f[N];
bool cmp(int x,int y) {
return x>y;
}
int ans=0;
int gcd(int x,int y) {
return !y?x:gcd(y,x%y);
}
int lcm(int x,int y) {
return x/gcd(x,y)*y;
}
signed main() {
n=rd(); for(int i=1;i<=n;i++) a[i]=rd();
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++) {
f[i]=a[i];
for(int j=i-1;j>=1;j--) {
if(a[i]==a[j]) f[i]=max(f[i],f[j]+(i-j)*a[i]);
else if(a[j]+a[i]+gcd(a[j],a[i])==lcm(a[j],a[i])) f[i]=max(f[i],f[j]+a[i]);
}
ans=max(ans,f[i]);
}
cout<<ans;
return 0;
}