#include <cstdio> using namespace std; typedef long long LL; int k; int p[100]; LL f(int, LL); LL g(int mask0, int mask, int c, LL pr, LL N) { if(c == k) return pr*f(mask, N/pr); LL x = g(mask0, mask, c+1, pr, N); if(( mask0 & (1<<c) ) && pr <= N/p[c]) { LL y = g(mask0, mask | (1<<c), c+1, pr*p[c], N); if(x < y) x = y; } return x; } LL f(int mask, LL N) { if(mask == 0) return 1; return g(mask, 0, 0, 1, N); } int main() { LL N; scanf("%i %lli", &k, &N); for(int i = 0; i < k; i++) scanf("%i", p+i); printf("%lli", f((1<<k)-1, N)); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <cstdio> using namespace std; typedef long long LL; int k; int p[100]; LL f(int, LL); LL g(int mask0, int mask, int c, LL pr, LL N) { if(c == k) return pr*f(mask, N/pr); LL x = g(mask0, mask, c+1, pr, N); if(( mask0 & (1<<c) ) && pr <= N/p[c]) { LL y = g(mask0, mask | (1<<c), c+1, pr*p[c], N); if(x < y) x = y; } return x; } LL f(int mask, LL N) { if(mask == 0) return 1; return g(mask, 0, 0, 1, N); } int main() { LL N; scanf("%i %lli", &k, &N); for(int i = 0; i < k; i++) scanf("%i", p+i); printf("%lli", f((1<<k)-1, N)); } |