提交时间:2024-04-14 17:43:16
运行 ID: 28463
#include<bits/stdc++.h> using namespace std; #define int long long #define double long double #define fr first #define sc second #define mk make_pair const int MAXN=510,inf=1000000000; int n,m,k,ans,a[MAXN],b[MAXN],p[MAXN],q[MAXN]; int a1[MAXN],a2[MAXN]; void dfs(int now,int sum){ //cout<<now<<" "<<sum<<endl; if(now==9){ // cout<<sum<<" "; assert(sum!=0); int tmp=0; for(int i=1;i<=n;i++){ if(sum%a1[i]==0){ q[a2[i]]+=b[i]; } } for(int i=1;i<=n;i++){ if(q[a2[i]]>0){ tmp+=q[a2[i]]; } q[a2[i]]=0; } //cout<<tmp<<endl; ans=max(ans,tmp); return; } int nx=1; while(nx<=500){ //cout<<now<<" "<<sum<<" "<<nx<<endl; dfs(now+1,sum*nx); nx*=p[now]; } } void slv(){ans=0; scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld%lld",&a[i],&b[i]); q[a[i]]+=b[i]; } n=0; for(int i=2;i<=500;i++){ if(q[i]){ a[++n]=i;b[n]=q[i]; } q[i]=0; } p[1]=2;p[2]=3;p[3]=5;p[4]=7;p[5]=11;p[6]=13;p[7]=17;p[8]=19; for(int i=1;i<=n;i++){ a2[i]=a[i];a1[i]=1; for(int o=1;o<=8;o++){ while(a2[i]%p[o]==0){ a1[i]*=p[o]; a2[i]/=p[o]; } } //cout<<a1[i]<<"."<<a2[i]<<" "; } dfs(1,1); printf("%lld",ans); } signed main(){ slv(); return 0; }