最直接的想法是枚舉每個數,看是否能用S中的元素將其分解,但1<=N<=100000,第N個數肯定會很大,這樣做肯定超時,放棄。
后來想利用STL中的set來解決,枚舉某一個數,如果屬于set,將其與S中各元素相乘的數放入set,如此循環,直至找到第N個數,提交后還是超時。看來即便是set,畢竟存取的效率不是O(1),性能還是有影響。
突然想到,這題不是跟poj的Ugly Number挺像的嘛,是Ugly Number的加強版。具體思想是:對于S中的每個元素p[i],設置一個下標pIdx[i],pIdx[i]指向humble number數組。進行N次循環,每次找出最小的p[i] * humble[pIdx[i]],將該數加入humble數組,然后pIdx[minIdx]++。這樣就能由小到大找出第N個humble number了。
PS:其實這種方法生成的humble number只能保證非降序,比如2×3和3×2就會生成相同的humble number,這種情況要排除。