/*我们可以套用这个策略:列出所有“购买方式/组合方式”

        单买:1单位,价格 a

        套餐:k个一组,价格 b

            设变量 k 表示组数(通常选大的单位,枚举组数更快)

            枚举 k,每次用公式算出需要多少补货(如单买),计算总价

            从所有结果中取最小值
    */
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    long long a, b, x;
    cin >> a >> b >> x; // 读入:a元单买,b元买3只,目标是至少x只

    long long cost = 1LL << 60; // 初始化一个超级大的数,表示最小费用


    // 枚举套餐数量:k = 套餐买几组(每组3只)
    for (long long k = 0; k <= x / 3 + 1; ++k) {
        long long  num_b = k;
        long long  num = 3 * num_b;

        // 剩下要用单买补多少只
        long long num_a = max(0LL, x - num);

        // 当前方案的总费用
        long long cur_cost = b * num_b + a * num_a;

        // 更新最小花费
        cost = min(cur_cost, cost);
    }

    // 输出最小费用
    cout << cost << endl;

    return 0;
}

循环有点难,从套餐入手,最多买x/3组,“至少”可以加两个防止越界。然后剩下的都用单买,看看这些组合里哪个cost最小