丑数(递推||优先队列)

来源:互联网 发布:Python 异常 编辑:程序博客网 时间:2024/05/21 11:04

#include<iostream>#include<queue>#include<set>#define ll long longusing namespace std;priority_queue<ll,vector<ll>,greater<ll> > Q;set<ll> st;int d[]={2,3,5};int main(){int k=0;Q.push(1);while(1){k++;ll x=Q.top();Q.pop();if(k==1500){cout<<x<<endl;break;}for(int i=0;i<3;++i){ll y=x*d[i];if(st.count(y)==0){st.insert(y);Q.push(y);}}}return 0;}

#include<iostream>using namespace std;#define ll long longint main(){ll p1,p2,p3,a[1550];int k;p1=p2=p3=k=1;a[k++]=1;//实际上p1,p2,p3一直维护着,最大,次大,第3大的值,十分巧妙 while(k<1503){int t=min(a[p1]*2,min(a[p2]*3,a[p3]*5));a[k++]=t;if(t==a[p1]*2) ++p1;if(t==a[p2]*3) ++p2;if(t==a[p3]*5) ++p3;}cout<<a[1500]<<endl;return 0;}

结果:859963392

原创粉丝点击