#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+PiBpdGVtczsKICAgIAogICAgbG9uZyBsb25nIHRlbXAgPSAxbGw7CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZG91YmxlIGVmZmljaWVuY3kgPSAoZG91YmxlKWNvc3RbaV0gLyB0ZW1wOyAvLyBpKzEgaXMgdGhlIHdlaWdodAogICAgICAgIGl0ZW1zLnB1c2hfYmFjayh7ZWZmaWNpZW5jeSwgdGVtcCwgY29zdFtpXX0pOwogICAgICAgIHRlbXAgKj0gMmxsOwogICAgfQogICAgCiAgICAvLyBTb3J0IGJ5IGVmZmljaWVuY3kgKHNtYWxsZXN0IGZpcnN0KQogICAgc29ydChpdGVtcy5iZWdpbigpLCBpdGVtcy5lbmQoKSk7CiAgICAKICAgIGxsIHRvdGFsQ29zdCA9IDA7CiAgICBpbnQgd2VpZ2h0QWNoaWV2ZWQgPSAwOwogICAgCiAgICBsbCBhbnMgPSBMTE9OR19NQVg7CiAgICAKICAgIAogICAgZm9yIChhdXRvIFtlZmYsIHdlaWdodCwgY3N0XSA6IGl0ZW1zKSB7CiAgICAgICAgaWYgKHdlaWdodEFjaGlldmVkID49IG1pbldlaWdodCkgYnJlYWs7CiAgICAgICAgCiAgICAgICAgLy8gSG93IG1hbnkgdW5pdHMgbmVlZGVkPwogICAgICAgIGludCBuZWVkZWQgPSAobWluV2VpZ2h0IC0gd2VpZ2h0QWNoaWV2ZWQgKyB3ZWlnaHQgLSAxKSAvIHdlaWdodDsgLy8gY2VpbAogICAgICAgIAogICAgICAgIHRvdGFsQ29zdCArPSAobGwpbmVlZGVkICogY3N0OwogICAgICAgIHdlaWdodEFjaGlldmVkICs9IChsbCluZWVkZWQgKiB3ZWlnaHQ7CiAgICAgICAgCiAgICAgICAgYW5zID0gbWluKGFucywgdG90YWxDb3N0KTsKICAgICAgICAKICAgICAgICBpZiAod2VpZ2h0QWNoaWV2ZWQgPT0gbWluV2VpZ2h0KSBicmVhazsKICAgICAgICAKICAgICAgICB0b3RhbENvc3QgLT0gY3N0OwogICAgICAgIHdlaWdodEFjaGlldmVkIC09IHdlaWdodDsKICAgIH0KICAgIAogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbiA9IDU7CiAgICB2ZWN0b3I8aW50PiBjb3N0ID0gezIsIDUsIDcsIDExLCAyNX07CiAgICBpbnQgbWluV2VpZ2h0ID0gMjY7CiAgICAKICAgIGNvdXQgPDwgZ2V0TWluaW11bUNvc3QoY29zdCwgbWluV2VpZ2h0KSA8PCBlbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQo=