题目链接:Humber Numbers
假设已经知道前k个丑数,想要知道第K+1个丑数,那么应该是所有ans[t]*prime[j]>ans[k]中最小的一个。
因此我们维护prime[j]中最小的t,记s[j],维护这个s[j]就行了。
/*
ID: xdujlx1
PROG: humble
LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans[100007],s[107],a[107];
const ll INF=1e15;
void ioinit()
{
freopen("humble.in","r",stdin);
freopen("humble.out","w",stdout);
}
int main()
{
ioinit();
int n,k;
cin>>k>>n;
int a[107];
for(int i=0;i<k;i++) cin>>a[i];
ans[0]=1;
for(int i=1;i<=n;i++)
{
ll now=INF;
for(int j=0;j<k;j++)
{
while(a[j]*ans[s[j]]<=ans[i-1]) s[j]++;
now=min(now,a[j]*ans[s[j]]);
}
ans[i]=now;
}
cout<<ans[n]<<endl;
return 0;
}