#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int coin[] = {1000, 100, 1}; bool check(const vector& a, int d) { for(int i=0; i<3; ++i){ int x = min(a[i], d / coin[i]); d -= x * coin[i]; } return d == 0; } void sub(vector& a, int d) { for(int i=0; i<3; ++i){ int x = min(a[i], d / coin[i]); d -= x * coin[i]; a[i] -= x; } } void add(vector& a, const vector& b) { for(int i=0; i<3; ++i) a[i] += b[i]; } int main() { vector init(3); for(int i=0; i<3; ++i) cin >> init[i]; vector value(2); vector > receive(2, vector(3)); for(int i=0; i<2; ++i){ cin >> value[i]; for(int j=0; j<3; ++j) cin >> receive[i][j]; } vector > dp(11, vector(101, -1)); dp[init[0]][init[1]] = init[2]; int ans = 0; for(;;){ vector > nextDp(11, vector(101, -1)); bool ok = false; for(int i=0; i<=10; ++i){ for(int j=0; j<=100; ++j){ for(int a=0; a<2; ++a){ vector v = {i, j, dp[i][j]}; if(check(v, value[a])){ sub(v, value[a]); add(v, receive[a]); nextDp[v[0]][v[1]] = max(nextDp[v[0]][v[1]], v[2]); ok = true; } } } } if(!ok){ cout << ans << endl; return 0; } dp.swap(nextDp); ++ ans; } }