#include <bits/stdc++.h> using namespace std; int T[40]; long long rek(int h, int v, int n){ if(h==0 or v==0){ return 0; } for(int i=0; i<n;i++){ if(h - T[i] >=0 and v - T[i] >= 0){ int wys = h/T[i]; int szer = v/T[i]; long long pom = rek(h-T[i]*wys, v, n); long long pom2 = rek(T[i]*wys, v - T[i]*szer, n); long long prop1 = pom + pom2; if(pom==-1 or pom2==-1){ return -1; } return prop1+ (long long) wys*szer; } } return -1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int h, v; cin>>h>>v; int n; cin>>n; for(int i=n-1;i>=0;i--){ cin>>T[i]; } cout<<rek(h,v,n)<<"\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 36 37 38 39 | #include <bits/stdc++.h> using namespace std; int T[40]; long long rek(int h, int v, int n){ if(h==0 or v==0){ return 0; } for(int i=0; i<n;i++){ if(h - T[i] >=0 and v - T[i] >= 0){ int wys = h/T[i]; int szer = v/T[i]; long long pom = rek(h-T[i]*wys, v, n); long long pom2 = rek(T[i]*wys, v - T[i]*szer, n); long long prop1 = pom + pom2; if(pom==-1 or pom2==-1){ return -1; } return prop1+ (long long) wys*szer; } } return -1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int h, v; cin>>h>>v; int n; cin>>n; for(int i=n-1;i>=0;i--){ cin>>T[i]; } cout<<rek(h,v,n)<<"\n"; } |