[模拟] 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)