【codeforces 510D】Fox And Jumping
【题目链接】:http://codeforces.com/contest/510/problem/D
【题意】 
 
你可以买n种卡片; 
每种卡片的花费对应c[i]; 
当你拥有了第i种卡片之后; 
你可以在任意位置x跳到x-l[i]或x+r[i]; 
问你至少要花费多少钱买卡片,使得你能够跳跃到坐标轴上的任意一个整数点;
【题解】 
 
有个结论; 
直接记下来吧 
如果gcd(a,b)==1,那么所有的点就都能跳跃到了; 
所以问题就转化为,给你n个长度,让你在这n个长度中选取若干个; 
使得它们的gcd为1; 
且要求花费的金钱最少; 
可以写个DP; 
f[x]表示gcd为x的最小花费; 
先预处理出单个数字的gcd的最小花费->设为出现的数字的最小花费就好; 
然后利用之前出现过的f[x]来更新gcd(x,a[i])的最小花费,即其的f值; 
最后看看gcd(1)能不能得到; 
能得到就有解; 
(在做DP的过程中不能时刻保证f[x]就是gcd为x的最小花费,但自己想想就能明白最后肯定是gcd为x的最小花费,因为gcd求的顺序不分先后的。) 
 
【Number Of WA】 
 
0 
 
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define ps push_back
#define fi first
#define se second
#define rei(x) cin >> x
#define pri(x) cout << x
#define ms(x,y) memset(x,y,sizeof x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 310;
const int INF = 21e8;
int n,l[N],c[N];
map<int,int> f;
int main()
{
    //freopen("F:\\rush.txt","r",stdin);
    ios::sync_with_stdio(false);
    rei(n);
    rep1(i,1,n)
        rei(l[i]);
    rep1(i,1,n)
        rei(c[i]);
    rep1(i,1,n)
    {
        if (!f[l[i]]) f[l[i]] = INF;
        f[l[i]] = min(f[l[i]],c[i]);
    }
    rep1(i,2,n)
    {
        for (pii x:f)
        {
            int pre = x.fi;
            int xin = __gcd(pre,l[i]);
            if (!f[xin]) f[xin] = INF;
            f[xin] = min(f[xin],x.se+c[i]);
        }
    }
    if (!f[1])
        return pri(-1),0;
    else
        pri(f[1]);
    //printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
    return 0;
}
【codeforces 510D】Fox And Jumping的更多相关文章
- 【codeforces 510C】Fox And Names
		
[题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...
 - 【codeforces 510B】Fox And Two Dots
		
[题目链接]:http://codeforces.com/contest/510/problem/B [题意] 让你在一个二维的方格里面找环; 两个点有相邻的边它们才是相连的; 有环YES,没环NO ...
 - 【codeforces 510A】Fox And Snake
		
[题目链接]:http://codeforces.com/contest/510/problem/A [题意] 让你画一条蛇.. [题解] 煞笔提 [Number Of WA] 0 [完整代码] #i ...
 - 【codeforces 415D】Mashmokh and ACM(普通dp)
		
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
 - 【codeforces 707E】Garlands
		
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
 - 【codeforces 707C】Pythagorean Triples
		
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
 - 【codeforces 709D】Recover the String
		
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
 - 【codeforces 709B】Checkpoints
		
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
 - 【codeforces 709C】Letters Cyclic Shift
		
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
 
随机推荐
- go语言笔记——指针,和C用法以及本质一样,但不支持指针的+-运算!
			
4.4.2 值类型和引用类型 所有像 int.float.bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值. Go 语言的取地址符是 &,放到一个 ...
 - 【POJ 3714】 Raid
			
[题目链接] http://poj.org/problem?id=3714 [算法] 分治求平面最近点对 [代码] #include <algorithm> #include <bi ...
 - [模板] BSGS
			
BSGS是一种解决一类专门的问题的解法,主要是解决已知A, B, C,求X使得A^x = B (mod p)这一类问题. 解法很简单,先设x = i*m-j(m=ceil(sqrt(p))),然后进行 ...
 - roundabout旋转幻灯
			
jquery.roundabout.js文件/** * jQuery Roundabout - v2.4.2 * http://fredhq.com/projects/roundabout * * M ...
 - Dockerfile镜像的制作
			
Dockerfile镜像的制作 如果学习Docker,那么制作镜像这一步肯定不能少的,别人给你的是环境,而你自己做的才是你最终需要的东西,接下来就记录一下如何制作一个满足自己的镜像,我们使用docke ...
 - 你真的知道GET和POST两种基本请求方法的区别吗?
			
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
 - python自动化测试学习笔记-1
			
一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行测试用例进行测试: 二.python ...
 - Jsp入门小常识
			
因为选修了一门信息系统的课,选择了用jsp做了一个系统.在这期间自学了jsp的一点皮毛,特与大家分享: script标签:用于向jsp中嵌入java代码块,<% // embed java c ...
 - [转]Linux中set,env和export这三个命令的区别
			
转自:http://www.2cto.com/os/201306/223758.html Linux中set,env和export这三个命令的区别 set命令显示当前shell的变量,包括当前用户 ...
 - 安装cloudermanager时如何正确Configuring TLS Security for Cloudera Manager
			
不多说,直接上干货! 参考官网 https://www.cloudera.com/documentation/enterprise/5-2-x/topics/cm_sg_config_tls_secu ...