题解 | 清楚姐姐买竹鼠

清楚姐姐买竹鼠

https://www.nowcoder.com/practice/816dfe69f83042108cf8c74531a94a35

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

        单买: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最小

全部评论

相关推荐

码农索隆:卡学历都不行了,开始卡颜值了
点赞 评论 收藏
分享
码农索隆:想看offer细节
点赞 评论 收藏
分享
07-15 12:15
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务