<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">题目大意:</span>
给定n个数,其中每次个数有一个权值,从中选中k个数,使得能利用加减法,得到数轴上所有的整数并且权值和最小,其实也就是能得到1。
可想到求最大公约数里有个辗转相减法,当这K个数的最大公约数为1时,则满足第一个条件。
代码:
In = lambda:map(int, raw_input().split())
input()
ads = {0:0}
def gcd(a, b):
while b:
b, a = a % b, b
return a
for vi in zip(In(), In()):
for item in ads.items():
a = gcd(vi[0], item[0])
ads[a] = min(ads.get(a, 100000000), item[1] + vi[1])
print ads.get(1, -1)