|
5#
楼主 |
发表于 2018-9-15 23:11:34
|
只看该作者
其实可以用优先队列的BFS,加上一个set判重,虽然有可能超时,但是训练一下BFS+SET也不错- #include <iostream>
- #include <queue>
- #include <set>
- using namespace std;
- priority_queue<int, vector<int>, greater<int> > a; ///定义小的在前的优先队列
- set<int> b; ///定义一个集合判重
- int i,k,n,s[110];
- int x,y;
- int main()
- {
- cin>>k>>n;
- for (i=1; i<=k; i++) cin>>s[i];
- a.push(1); ///首元素进队
- b.insert(1);
- while (n--)
- {
- x=a.top();///取队首元素
- a.pop();///弹出
- for (i=1; i<=k; i++)
- {
- y=x*s[i]; ///生成儿子
- if (b.count(y)==0) /// 判重
- {
- a.push(y); ///进队
- b.insert(y);
- }
- }
- }
- cout<<a.top();
- return 0;
- }
复制代码
|
|