贪心、搜索,但是 Wa on 27
查看原帖
贪心、搜索,但是 Wa on 27
726525
CuteChat楼主2024/7/3 18:52

只是把 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;
}
2024/7/3 18:52
加载中...