#include <bits/stdc++.h> using namespace std; vector<long long> a; long long dfs(long long h, long long w) { if(h * w == 0) return 0; for(auto&& e : a) { if(e <= h && e <= w) { long long cnt_h = h / e, cnt_w = w / e; long long cut_h = cnt_h * e, cut_w = cnt_w * e; long long d1 = dfs(cut_h, w - cut_w); long long d2 = dfs(h - cut_h, w); if(d1 == -1 || d2 == -1) return -1; long long r = cnt_h * cnt_w + d1 + d2; // cerr << h << ' ' << w << ' ' << r << endl; return r; } } return -1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long h, w; cin >> h >> w; long long n; cin >> n; a.resize(n); for(auto&& e : a) cin >> e; reverse(a.begin(), a.end()); cout << dfs(h, w) << '\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 <bits/stdc++.h> using namespace std; vector<long long> a; long long dfs(long long h, long long w) { if(h * w == 0) return 0; for(auto&& e : a) { if(e <= h && e <= w) { long long cnt_h = h / e, cnt_w = w / e; long long cut_h = cnt_h * e, cut_w = cnt_w * e; long long d1 = dfs(cut_h, w - cut_w); long long d2 = dfs(h - cut_h, w); if(d1 == -1 || d2 == -1) return -1; long long r = cnt_h * cnt_w + d1 + d2; // cerr << h << ' ' << w << ' ' << r << endl; return r; } } return -1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long h, w; cin >> h >> w; long long n; cin >> n; a.resize(n); for(auto&& e : a) cin >> e; reverse(a.begin(), a.end()); cout << dfs(h, w) << '\n'; } |