hdu 5339 Untitled
2015-08-01 21:49
225 查看
Untitled
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 166 Accepted Submission(s): 83
[align=left]Problem Description[/align]
There is an integer a
and n
integers b1,…,bn.
After selecting some numbers from b1,…,bn
in any order, say c1,…,cr,
we want to make sure that a mod c1 mod c2 mod… mod cr=0
(i.e., a
will become the remainder divided by ci
each time, and at the end, we want a
to become 0).
Please determine the minimum value of r.
If the goal cannot be achieved, print −1
instead.
[align=left]Input[/align]
The first line contains one integer
T≤5,
which represents the number of testcases.
For each testcase, there are two lines:
1. The first line contains two integers n
and a
(1≤n≤20,1≤a≤106).
2. The second line contains n
integers b1,…,bn
(∀1≤i≤n,1≤bi≤106).
[align=left]Output[/align]
Print T
answers in T
lines.
[align=left]Sample Input[/align]
2
2 9
2 7
2 9
6 7
[align=left]Sample Output[/align]
2
-1
对于一组可能的答案ccc,如果先对一个觉小的cic_ici取模,再对一个较大的cjc_jcj取模,那么这个较大的cjc_jcj肯定是没有用的。因此最终的答案序列中的ccc肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是000就可以了。时间复杂度O(2n)O(2^n)O(2n).从小到大枚举,就可以了,。复杂度o(2^n)
#define N 205
#define M 100005
#define maxn 205
#define MOD 1000000000000000007
int T,n,a,pri
,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;
}
[align=left]Source[/align]
BestCoder Round #49 ($)
[align=left]Recommend[/align]
hujie | We have carefully selected several similar problems for you: 5342 5341 5339 5338 5337
Statistic | Submit | Discuss
| Note
相关文章推荐
- Android开发时你遇到过什么相见恨晚的工具或网站?
- STL学习记录(十六):Queue、Priority Queue
- 【转】无后端(nobackend):前端优先的Web开发【译】
- 说反话(c++实现)
- 公司的实战mongodb Replica Sets+Sharding方案采用配置文件2
- Leetcode #228 Summary Ranges
- 线性判别分析(Linear Discriminant Analysis)
- MySQL5.6.26免安装步骤
- Oracle 学习之RMAN(十四)恢复实战--基于时间点恢复
- Ceph学习之Crush算法—— Bucket
- linux进程一章知识总结
- jsp页面与jsp页面之间的传值
- 九度oj 1444
- 把线性方程组变系数矩阵和常量形式
- 黑马程序员------网络编程(TCP&UDP)
- 公交车比喻
- 说反话(c++实现)
- nutch2.2.1 mysql 建表语句
- 说反话(c++实现)
- Decode Ways