Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <iomanip>
- #include <stack>
- #include <set>
- #include <map>
- #include <queue>
- #include <deque>
- using namespace std;
- int main() {
- long long m;
- vector <long long> a(30);
- cin >> m;
- for(long long i = 0; i < 30; ++i) {
- cin >> a[i];
- }
- long long ans = 0;
- long long count = 0;
- while(count < m) {
- long double bettercost = (1 << 30) + 1;
- long long idans2 = -1;
- for(long long i = 0; i < 30; ++i) {
- if(a[i] > m - count) {
- a[i] = m - count;
- }
- long double curcost = (1 << i) / (long double) a[i];
- if(curcost < bettercost) {
- bettercost = curcost;
- idans2 = i;
- }
- }
- long long necess = m - count;
- long long vozmu = necess / a[idans2];
- count += vozmu * a[idans2];
- ans += vozmu * (1 << idans2);
- }
- cout << ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement