#include <bits/stdc++.h> using namespace std; long long d[102]; int n; long long koszt_pokrycia(long long a, long long b) { if(!(a&&b)) return 0; if(a<0||b<0) return -1; long long p1=min(a, b), p2=max(a, b); for(int i=n-1; i>=0; i--){ if(d[i]<=p1){ long long k1=p1/d[i], k2=p2/d[i]; long long q1=koszt_pokrycia(p1-k1*d[i], k2*d[i]), q2=koszt_pokrycia(p1, p2-k2*d[i]); if(q1==-1||q2==-1) return -1; return k1*k2+q1+q2; } } return -1; } int main() { ios_base::sync_with_stdio(0); long long h, w; cin>>h>>w; cin>>n; for(int i=0; i<n; i++) cin>>d[i]; cout<<koszt_pokrycia(h, w); return 0; }
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 | #include <bits/stdc++.h> using namespace std; long long d[102]; int n; long long koszt_pokrycia(long long a, long long b) { if(!(a&&b)) return 0; if(a<0||b<0) return -1; long long p1=min(a, b), p2=max(a, b); for(int i=n-1; i>=0; i--){ if(d[i]<=p1){ long long k1=p1/d[i], k2=p2/d[i]; long long q1=koszt_pokrycia(p1-k1*d[i], k2*d[i]), q2=koszt_pokrycia(p1, p2-k2*d[i]); if(q1==-1||q2==-1) return -1; return k1*k2+q1+q2; } } return -1; } int main() { ios_base::sync_with_stdio(0); long long h, w; cin>>h>>w; cin>>n; for(int i=0; i<n; i++) cin>>d[i]; cout<<koszt_pokrycia(h, w); return 0; } |