cf510 D. Fox And Jumping(dp)

Posted 为了贝拉我要刷cf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf510 D. Fox And Jumping(dp)相关的知识,希望对你有一定的参考价值。

题意:

给定数组 \\(a_i\\),选每个数有代价 \\(c_i\\)。在数组中选若干个互质的数,求最小代价。

最小代价互质组

\\(1\\le n \\le 300\\)

思路:

\\(mp[g]\\) 记录使得公因子为 \\(g\\) 的最小代价。数值比较离散所以开map记录。然后直接dp即可。

const int N = 310;
int n, a[N], c[N];
map<int, int> mp;

signed main()

    scanf("%d", &n);
    for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
    for(int i = 1; i <= n; i++) scanf("%d", &c[i]);

    for(int i = 1; i <= n; i++)
    
        if(!mp[a[i]]) mp[a[i]] = c[i];
        else mp[a[i]] = min(mp[a[i]], c[i]);

        for(auto &[G,C] : mp)
        
            int g = __gcd(G, a[i]);
            if(!mp[g]) mp[g] = c[i] + C;
            else mp[g] = min(mp[g], c[i] + C);
        
    

    if(!mp[1]) mp[1] = -1;
    printf("%d", mp[1]);


以上是关于cf510 D. Fox And Jumping(dp)的主要内容,如果未能解决你的问题,请参考以下文章

CF510E. Fox And Dinner

题解 CF510E Fox And Dinner

题解 CF510E Fox And Dinner

Fox And Jumping

Codeforces_512B: Fox And Jumping

codeforce 510C Fox And Names