首页 > 其他 > 详细

Codeforces_512_B

时间:2016-09-17 13:26:01      阅读:177      评论:0      收藏:0      [点我收藏+]

http://codeforces.com/problemset/problem/512/B

 

dp题,因为状态很多,所以用map保存,注意代码中的那个二层循环不能内外换,因为map会自动排序。

 

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;

int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
} 


int l[305],c[305];

int main()
{
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++)    cin >> l[i];
    for(int i = 1;i <= n;i++)    cin >> c[i];
    map<int,int> mp;
    mp.clear();
    map<int,int>::iterator it;
    mp[0] = 0;
    for(int i = 1;i <= n;i++)
    {
        for(it = mp.begin();it != mp.end();it++)
        {
            int temp = gcd(l[i],it->first);
            if(mp.count(temp))    mp[temp] = min(mp[temp],it->second+c[i]);
            else    mp[temp] = it->second+c[i];
        }
    }
    if(mp.count(1))    printf("%d\n",mp[1]);
    else    printf("-1\n");
    return 0;
}

 

Codeforces_512_B

原文:http://www.cnblogs.com/zhurb/p/5878311.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!