[模拟] aw3776. 水果拼盘(模拟+CF1271A)

Posted Ypuyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模拟] aw3776. 水果拼盘(模拟+CF1271A)相关的知识,希望对你有一定的参考价值。

1. 题目来源

链接:3776. 水果拼盘

2. 题目解析

显然,哪个利润多先选哪个方案,方案一由 a,d 两种数量最小值决定,方案二由 b,c,d 三种数量最小值决定。然后直接计算就行了…

为啥我的第一反应就直接 while 来搞呢,时间直接到了 O ( n ) O(n) O(n)


时间复杂度: O ( 1 ) O(1) O(1)

空间复杂度: O ( 1 ) O(1) O(1)


直接计算即可。

C++ 多个元素取最大、最小值。是 C++11 的语法糖,是在列表 list 内取最小值!而初始化一个无名 list 是要使用花括号的。在这个花括号里面的必须定义小于号!

#include <bits/stdc++.h>

using namespace std;

int a, b, c, d, e, f;

int main() {
    int T; cin >> T; while (T -- ) {
        cin >> a >> b >> c >> d >> e >> f;
        int res = 0;
        if (e > f) res += min(a, d) * e, d -= min(a, d), res += min({b, c, d}) * f;
        else res += min({b, c, d}) * f, d -= min({b, c, d}), res += min(a, d) * e;

        cout << res << endl;
    }

    return 0;
}

while 写法,也可以直接枚举 d,分给两种方案,求个最大值也行。

#include <bits/stdc++.h>

using namespace std;

int a, b, c, d, e, f;

int main() {
    int T; cin >> T; while (T -- ) {
        cin >> a >> b >> c >> d >> e >> f;
        int res = 0;
        if (e < f) {
            while (b && c && d) b -- , c -- , d -- , res += f;
            while (a && d) a -- , d -- , res += e;
        } else {
            while (a && d) a -- , d -- , res += e;
            while (b && c && d) b -- , c -- , d -- , res += f;
        }

        cout << res << endl;
    }

    return 0;
}

以上是关于[模拟] aw3776. 水果拼盘(模拟+CF1271A)的主要内容,如果未能解决你的问题,请参考以下文章

[数学] aw3815. 最大约数(模拟+分解质因数+CF588B)

[数学] aw3815. 最大约数(模拟+分解质因数+CF588B)

[构造] aw3731. 序列凑零(模拟+构造)

[模拟] aw3655. 楼层(模拟+水题)

[模拟] aw3664. 数组补全(模拟+贪心+中位数+思维)

如何使用不同的方法多次模拟调用 AWS 服务的 Golang 函数的单元测试?