Bestcoder Round#49 1001Untitled
2015-08-02 12:13
1431 查看
http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=611&pid=1001
对于一组可能的答案c,如果先对一个觉小的ci
取模,再对一个较大的cj取模,那么这个较大的cj
肯定是没有用的。因此最终的答案序列中的c肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是0就可以了。时间复杂度O(2^n)
对于一组可能的答案c,如果先对一个觉小的ci
取模,再对一个较大的cj取模,那么这个较大的cj
肯定是没有用的。因此最终的答案序列中的c肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是0就可以了。时间复杂度O(2^n)
#include <iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> using namespace std; const int INF = 0x3f3f3f3f; int i,t,minV,n,a; int s[100050]; void dfs(int b,int t,int k) //b是当前这个数 t是剩下的总个数 k是求的值 { if (k > minV) return; if (b==0) { minV = min(minV,k); return; } for(int i = t-1;i>=1;i--) { if (b>=s[i]) dfs(b%s[i],i,k+1); } } int main() { freopen("in.txt","r",stdin); scanf("%d",&t); while(t--) { minV = INF; scanf("%d%d",&n,&a); for(int i = 1; i <= n; i++) scanf("%d",&s[i]); sort(s+1,s+n+1); dfs(a,n+1,0); if (minV != INF) printf("%d\n",minV); else printf("-1\n"); } return 0; }
相关文章推荐
- Valid Anagram
- unix下errno.h文件声明
- spring ioc DI 理解
- Spring-Session
- 【算法设计与分析基础】关灯游戏
- Itext的简单应用和学习
- android:layout_centerHorizontal="true"和 android:gravity="center_horizontal"什么区别?
- 南沙政府应急系统之GIS一张图(arcgis api for flex)讲解(二)鹰眼模块
- A+B
- Selenium2学习-026-WebUI自动化实战实例-024-获取页面元素
- JAVA中文乱码问题的产生和建议解决办法
- Android开发笔记---Broadcast Receiver的简单使用
- Android studio Gradle sdl method not found ...
- C++ 虚函数表解析
- Codeforces 553 C. Love Triangles
- iOS-随机点名或抽奖游戏的实现
- LeetCode之Search Insert Position
- hibernate学习系列-----(1)开发环境搭建
- Java程序设计之最大公约数和最小公倍数
- Google黑客常用的入侵语法