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