只是把 bfs 的实现换成了 dfs 而已。
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a, b, h, w, n, x[100005];
map<array<int, 3>, int> vis;
int dfs(int i, int j, int k) {
i = min(i, a);
j = min(j, b);
if (vis[{i, j, k}]) return vis[{i, j, k}];
if (i >= a && j >= b) return 0;
if (k == n + 1 || x[k] == 0 || x[k] == 1) {
if (i < a || j < b) return 1ll << 60;
return 0;
}
return vis[{i, j, k}] = min((j < b) ? dfs(i, j * x[k], k + 1) : 1ll << 60, (i < a) ? dfs(i * x[k], j, k + 1) : (1ll << 60)) + 1;
}
signed main() {
ios::sync_with_stdio(0);
cin >> a >> b >> h >> w >> n;
if (h >= a && b >= w) return cout << 0, 0;
for (int i = 1; i <= n; ++i) cin >> x[i];
sort(x + 1, x + n + 1);
reverse(x + 1, x + n + 1);
int tmp = dfs(h, w, 1);
if (tmp > n) tmp = -1;
cout << tmp;
return 0;
}