2019 ICPC EC Final M(暴力)
90nwyn
2020-10-05 16:39:18
[题目链接](https://vjudge.net/problem/Gym-102471M)
------------
------------
```cpp
#include <bits/stdc++.h>
using namespace std;
const int M=1e6+5;
typedef long long ll;
ll a[M],b[M];
int vis[M],num[M],tot;
ll calc()
{
ll res=0;
for(int i=1;i<(1<<tot);i++)
{
ll sum=0;
for(int j=0;j<tot;j++)if(i&(1<<j))
{
sum+=a[num[j+1]];
for(int k=j+j+1;k<tot;k+=j+1)if(i&(1<<k))sum-=b[num[k+1]];
}
res=max(res,sum);
}
return res;
}
int main()
{
int n;scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)scanf("%lld",&b[i]);
ll ans=a[1];
for(int i=2;i<=n;i++)if(!vis[i])
{
tot=0;
num[++tot]=i;
ll t=(ll)i*i;
while(t<=n)num[++tot]=t,vis[t]=1,t*=i;
ans+=calc();
}
printf("%lld\n",ans);
return 0;
}
```