#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"; } |
English