第一行输入整数
。
第二行输入
个两两不同的整数
。
若存在合法选取方案,输出最小可能和;否则输出
。
4 12 15 28 22
17
可取素因子,和为
;任意合法方案的和都不小于
。
5 4 5 6 7 8
-1
package main import ( "fmt" "math" ) func main() { var n int fmt.Scan(&n) arr:=make([][]int,n) var x int for i:=0;i<n;i++{ fmt.Scan(&x) tmp:=make_arr(x) arr[i]=tmp } // fmt.Printf("%v\n",arr) min:=math.MaxInt32 vis:=map[int]bool{} var dfs func(int,int) dfs=func(j int,sum int){ if j==n{ if sum<min{ min=sum } return } for i:=0;i<len(arr[j]);i++{ x:=arr[j][i] if _,ok:=vis[x];ok{ continue } sum+=x vis[x]=true dfs(j+1,sum) sum-=x delete(vis,x) } } dfs(0,0) if min==math.MaxInt32{ fmt.Println(-1) return } fmt.Println(min) } func make_arr(x int)[]int{ ans:=[]int{} for i:=2;i<=x;i++{ if x%i==0&&check(i){ ans=append(ans,i) } } return ans } func check(x int)bool{ for i:=2;i<x;i++{ if x%i==0{ return false } } return true }