#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
long getMinimumCost(vector<int> cost, int minWeight) {
int n = cost.size();
// (cost per weight, weight, cost)
vector<tuple<double, int, int>> items;
long long temp = 1ll;
for (int i = 0; i < n; i++) {
double efficiency = (double)cost[i] / temp; // i+1 is the weight
items.push_back({efficiency, temp, cost[i]});
temp *= 2ll;
}
// Sort by efficiency (smallest first)
sort(items.begin(), items.end());
ll totalCost = 0;
int weightAchieved = 0;
ll ans = LLONG_MAX;
for (auto [eff, weight, cst] : items) {
if (weightAchieved >= minWeight) break;
// How many units needed?
int needed = (minWeight - weightAchieved + weight - 1) / weight; // ceil
totalCost += (ll)needed * cst;
weightAchieved += (ll)needed * weight;
ans = min(ans, totalCost);
if (weightAchieved == minWeight) break;
totalCost -= cst;
weightAchieved -= weight;
}
return ans;
}
int main() {
int n = 5;
vector<int> cost = {2, 5, 7, 11, 25};
int minWeight = 26;
cout << getMinimumCost(cost, minWeight) << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmxvbmcgZ2V0TWluaW11bUNvc3QodmVjdG9yPGludD4gY29zdCwgaW50IG1pbldlaWdodCkgewogICAgaW50IG4gPSBjb3N0LnNpemUoKTsKICAgIAogICAgLy8gKGNvc3QgcGVyIHdlaWdodCwgd2VpZ2h0LCBjb3N0KQogICAgdmVjdG9yPHR1cGxlPGRvdWJsZSwgaW50LCBpbnQ+PiBpdGVtczsKICAgIAogICAgbG9uZyBsb25nIHRlbXAgPSAxbGw7CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZG91YmxlIGVmZmljaWVuY3kgPSAoZG91YmxlKWNvc3RbaV0gLyB0ZW1wOyAvLyBpKzEgaXMgdGhlIHdlaWdodAogICAgICAgIGl0ZW1zLnB1c2hfYmFjayh7ZWZmaWNpZW5jeSwgdGVtcCwgY29zdFtpXX0pOwogICAgICAgIHRlbXAgKj0gMmxsOwogICAgfQogICAgCiAgICAvLyBTb3J0IGJ5IGVmZmljaWVuY3kgKHNtYWxsZXN0IGZpcnN0KQogICAgc29ydChpdGVtcy5iZWdpbigpLCBpdGVtcy5lbmQoKSk7CiAgICAKICAgIGxsIHRvdGFsQ29zdCA9IDA7CiAgICBpbnQgd2VpZ2h0QWNoaWV2ZWQgPSAwOwogICAgCiAgICAgbGwgYW5zID0gTExPTkdfTUFYOwogICAgCiAgICAKICAgIGZvciAoYXV0byBbZWZmLCB3ZWlnaHQsIGNzdF0gOiBpdGVtcykgewogICAgICAgIGlmICh3ZWlnaHRBY2hpZXZlZCA+PSBtaW5XZWlnaHQpIGJyZWFrOwogICAgICAgIAogICAgICAgIC8vIEhvdyBtYW55IHVuaXRzIG5lZWRlZD8KICAgICAgICBpbnQgbmVlZGVkID0gKG1pbldlaWdodCAtIHdlaWdodEFjaGlldmVkICsgd2VpZ2h0IC0gMSkgLyB3ZWlnaHQ7IC8vIGNlaWwKICAgICAgICAKICAgICAgICB0b3RhbENvc3QgKz0gKGxsKW5lZWRlZCAqIGNzdDsKICAgICAgICB3ZWlnaHRBY2hpZXZlZCArPSAobGwpbmVlZGVkICogd2VpZ2h0OwogICAgICAgIAogICAgICAgIGFucyA9IG1pbihhbnMsIHRvdGFsQ29zdCk7CiAgICAgICAgCiAgICAgICAgaWYgKHdlaWdodEFjaGlldmVkID09IG1pbldlaWdodCkgYnJlYWs7CiAgICAgICAgCiAgICAgICAgdG90YWxDb3N0IC09IGNzdDsKICAgICAgICB3ZWlnaHRBY2hpZXZlZCAtPSB3ZWlnaHQ7CiAgICB9CiAgICAKICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCkgewogICAgaW50IG4gPSA1OwogICAgdmVjdG9yPGludD4gY29zdCA9IHsyLCA1LCA3LCAxMSwgMjV9OwogICAgaW50IG1pbldlaWdodCA9IDI2OwogICAgCiAgICBjb3V0IDw8IGdldE1pbmltdW1Db3N0KGNvc3QsIG1pbldlaWdodCkgPDwgZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0=