HDU-5339 Untitled
2015-08-16 18:27
302 查看
题意:
有一个整数aa和nn个整数b_1, \ldots, b_nb1,…,bn。在这些数中选出若干个数并重新排列,得到c_1, \ldots, c_rc1,…,cr。我们想保证a \ mod \ c_1 \ mod \ c_2 \ mod \ldots \ mod \ c_r = 0a mod c1 mod c2 mod… mod cr=0。请你得出最小的rr,也就是最少要选择多少个数字。如果无解,请输出-1−1.
题解:对于一组可能的答案cc,如果先对一个觉小的c_ici取模,再对一个较大的c_jcj取模,那么这个较大的c_jcj肯定是没有用的。因此最终的答案序列中的cc肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是00就可以了。时间复杂度O(2^n)O(2n).
//:直接DFS搞定
AC代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 30 int b[N]; int n,a; int MIN; void dfs(int cur,int x,int len) { if(x==0) MIN=min(MIN,len); if(cur==-1) return; dfs(cur-1,x,len); dfs(cur-1,x%b[cur],len+1); } int main() { int m; scanf("%d",&m); while(m--) { scanf("%d%d",&n,&a); int i; for(i=0;i<n;i++) { scanf("%d",&b[i]); } sort(b,b+n); MIN=30; dfs(n-1,a,0); if(MIN<30) { printf("%d\n",MIN); } else { printf("-1\n"); } } return 0; }
相关文章推荐
- linux命令之pstack
- HDFS-3.HDFS架构
- ul宽度自适应让li居中
- 奇异值分解(SVD)
- 手动解析CrashLog之——原理篇
- cocos2dx——lua自动和手动绑定
- C++给文件加密技术如此简单
- Vim - python autocomplete plugin
- Length of Last Word
- 定义常量的三种方法
- HTTP详解-工作原理
- 关于$.Deferred()对象的应用
- GitHub上整理的一些工具,求补充
- 浅谈new与delete
- 关联容器总结
- codeforces 570 D. Tree Requests (dfs)
- (转)系统设计题要考虑的方面
- ehcache集群详解一(支持的集群类型)
- 设计模式基本概念总结(一)
- A7139 无线通信驱动(STM32) 增加FIFO扩展模式,可以发送超大数据包