题目链接:https://codeforces.com/problemset/problem/510/D
知识点:动态规划
思路:选取最便宜的几个互质的数(大于2),可以用动态规划的思想,用map优化
#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
using namespace std;
typedef pair<ll,ll> pii;
const int N=307;
pii a[N];
map<ll,ll> dp;
int main()
{
ll n;
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i].fi);
for(int i=1;i<=n;i++) scanf("%lld",&a[i].se);
for(int i=1;i<=n;i++)
{
if(dp[a[i].fi]==0) dp[a[i].fi]=a[i].se;
else dp[a[i].fi]=min(a[i].se,dp[a[i].fi]);
for(auto it:dp)
{
ll g=__gcd(it.fi,a[i].fi);
if(dp[g]==0) dp[g]=it.se+a[i].se;
else dp[g]=min(dp[g],it.se+a[i].se);
}
}
if(dp[1]==0) dp[1]=-1;
printf("%lld\n",dp[1]);
}