提交时间:2024-04-14 18:55:07

运行 ID: 28471

#include<bits/stdc++.h> using namespace std; int limit[]={0,8,5,3,3,2,2,2,2}; int kind[]={0,2,3,5,7,11,13,17,19}; int a[11]; int n; int otp[550][10]; int p[550]; int v[550]; int ans=0; int chk(){ int cnt=0; for(int i=1;i<=500;i++) p[i]=0; for(int i=1;i<=n;i++){ bool fl=1; for(int j=1;j<=8;j++){ if(a[j]<otp[i][j]) fl=0; }if(fl){ p[otp[i][9]]+=v[i]; } }for(int i=1;i<=500;i++){ if(p[i]>0||i==1) cnt+=p[i]; }return cnt; }void dfs(int id){ if(id>=9){ ans=max(chk(),ans); return ; }for(int i=0;i<=limit[id];i++){ a[id]=i; dfs(id+1); } } int main(){ cin>>n; for(int i=1;i<=n;i++){ int x;cin>>x>>v[i]; for(int j=1;j<=8;j++){ while(x%kind[j]==0) otp[i][j]++,x/=kind[j]; }otp[i][9]=x; //cout<<x; }dfs(1); cout<<ans<<endl; return 0; }