2 2 9 2 7 2 9 6 7
2 -1
对于一组可能的答案c,如果先对一个觉小的c?i??取模,再对一个较大的c?j??取模,那么这个较大的c?j??肯定是没有用的。因此最终的答案序列中的c肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是0就可以了。时间复杂度O(2?n??).从小到大枚举,就可以了,。复杂度o(2^n)
#define N 205
#define M 100005
#define maxn 205
#define MOD 1000000000000000007
int T,n,a,pri[N],ans;
int Dfs(int x,int m,int num){
if(m == 0){
ans = min(ans,num);
return 0;
}
for(int i = x - 1;i>=0;i--){
if(m >= pri[i])
Dfs(i,m%pri[i],num+1);
}
}
int main()
{
while(S(T)!=EOF)
{
while(T--){
S2(n,a);
FI(n) S(pri[i]);
sort(pri,pri+n);
ans = INF;
Dfs(n,a,0);
if(ans == INF) ans = -1;
printf("%d\n",ans);
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/mengzhengnan/article/details/47191085