83分TLE代码:
#include<bits/stdc++.h>
using namespace std;
int arr[105],pq[100005],pos[105];
int main(){
int k,n;
scanf("%d%d",&k,&n);
for(int i=1;i<=k;i++){
scanf("%d",&arr[i]);
}
pq[0]=1;
for(int cnt=1;cnt<=n;cnt++){
int mn=2147483647;
for(int i=1;i<=k;i++){
pos[i]=0;
while(arr[i]*pq[pos[i]]<=pq[cnt-1]){
pos[i]++;
}
if(arr[i]*pq[pos[i]]<mn){
mn=arr[i]*pq[pos[i]];
}
}
pq[cnt]=mn;
}
printf("%d",pq[n]);
}
100分代码:
#include<bits/stdc++.h>
using namespace std;
int arr[105],pq[100005],pos[105];
int main(){
int k,n;
scanf("%d%d",&k,&n);
for(int i=1;i<=k;i++){
scanf("%d",&arr[i]);
}
pq[0]=1;
for(int cnt=1;cnt<=n;cnt++){
int mn=2147483647;
for(int i=1;i<=k;i++){
while(arr[i]*pq[pos[i]]<=pq[cnt-1]){
pos[i]++;
}
if(arr[i]*pq[pos[i]]<mn){
mn=arr[i]*pq[pos[i]];
}
}
pq[cnt]=mn;
}
printf("%d",pq[n]);
}
区别就是一个用数组存的下标,一个用变量存的下标。
就离谱。。。