个人感觉好难得一道题啊,思路确实不好想,看了题解才做出来的。
/*
ID: jinusac1
PROG: humble
LANG: C++
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int r[100010]={0},prime[110],total=0,pindex[110]={0};
int n,k;
int main()
{
freopen("humble.in","r",stdin);
freopen("humble.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>prime[i];
r[total++]=1;
while(true){
if(total>k) break;
r[total]=2147483647;//初始化为signed int可表示的最大正值
for(int i=1;i<=n;i++)
for(int j=pindex[i];j<=total;j++){
int num=prime[i]*r[j];
if(num>r[total-1]){
r[total]=min(num,r[total]);//因为下条语句的需要,所以才会进入这个if语句,但要选择最小值
pindex[i]=j;//标记每个质数已经乘到哪了,下次枚举直接从这里开始,提高效率
break;//每个质数找到一个已后即可退出,一位r中数字按升序排列,后一个一定比这个大
}
}
total++;
}
cout<<r[k]<<endl;
return 0;
}