---恢复内容开始---

Write a program to find the nth super ugly number.

Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k. For example, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] is the sequence of the first 12 super ugly numbers given primes = [2, 7, 13, 19] of size 4.

Note:
(1) 1 is a super ugly number for any given primes.
(2) The given numbers in primes are in ascending order.
(3) 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
(4) The nth super ugly number is guaranteed to fit in a 32-bit signed integer.

题目中要求所求数的所有质因子必须在list中:那么所有的数都是list中这些数的组合,和264. Ugly Number II的处理方式一样

每新加一个数都要把这个数乘以所有可能的质数作为备选所以这个数没用之前每个质数idx都会指向这个数

 1 class Solution {
 2 public:
 3     int nthSuperUglyNumber(int n, vector<int>& primes) {
 4         vector<int> idx(primes.size(),0);
 5         vector<int> dp(n,1);
 6         int i = 1;
 7         while(i < n)
 8         {
 9             dp[i] = INT_MAX;
10             for(int j = 0; j < primes.size(); j++)
11             {
12                 dp[i] = min(dp[i], primes[j]*dp[idx[j]]);
13             }
14             for(int j = 0; j < primes.size(); j++)
15             {
16                 if(primes[j]*dp[idx[j]] == dp[i])
17                     idx[j]++;
18             }
19             i++;
20         }
21         return dp[n-1];
22     }
23 };