标签:
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