10.15B度(已改编)-第二套
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
✨ 本系列打算持续跟新
春秋招算法题
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 算法合集传送们 -> 🧷学长刷题笔记
🍒 本专栏已收集
140+
套题,算法题
会在第一时间跟新🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🍥 本次百度共有三套卷,本套卷是两题卷,题目难度相比于其他的难度较小
1️⃣ 打卡题,考虑到数据范围十分小,每次暴力的加最小的那个
2️⃣ 前后缀分解+动态规划,然后
🌈 01.花园美化计划 评测链接🔗
问题描述
K小姐是一位园艺爱好者,她有一个美丽的花园。花园里有四种不同的花卉,分别用 、、、 表示每种花卉的数量。为了让花园更加美丽,K小姐决定进行一项花园美化计划。
她计划在 天内每天为其中一种花卉增加一株。K小姐想知道,在完成这个计划后,四种花卉数量的乘积最大可以达到多少。
输入格式
输入包含多组测试数据。
第一行包含一个正整数 ,表示测试数据组数。
接下来 行,每行描述一组测试数据,包含五个整数 、、、 和 ,分别表示四种花卉的初始数量和计划天数。
输出格式
输出包含 行。
对于每组测试数据输出一行一个整数,表示完成计划后四种花卉数量的最大乘积。
样例输入1
2
1 2 3 4 2
1 2 1 2 3
样例输出1
72
24
样例解释
样例1 | 对于第一组测试数据,K小姐可以给第一种花卉增加1株,给第二种花卉增加1株,最终四种花卉的数量为2、3、3、4,乘积最大为72。 对于第二组测试数据,K小姐可以给第一种花卉增加1株,给第三种花卉增加1株,给第四种花卉增加1株,最终四种花卉的数量为2、2、2、3,乘积最大为24。 |
数据范围
题解
贪心+模拟
需要理解,要使四个数的乘积最大,应该尽可能地平衡这四个数。
解题思路如下:
-
每次操作时,应该选择当前最小的数进行增加。这是因为乘法的特性决定了,增加较小的数会比增加较大的数带来更大的收益。
-
我们可以使用一个循环,每次找出四个数中的最小值,将其加1,然后重复这个过程k次。
-
最后,计算四个数的乘积即可得到答案。
举个例子,假设初始状态是1、2、3、4,k=2:
- 第一次操作:选择1(最小值),变成2、2、3、4
- 第二次操作:选择2(最小值),变成2、3、3、4
- 最终乘积:2 * 3 * 3 * 4 = 72
参考代码
- Python
# 读取测试数据组数
T = int(input())
for _ in range(T):
# 读取每组测试数据
a, b, c, d, k = map(int, input().split())
# 创建花卉数量列表
flowers = [a, b, c, d]
# 进行k次操作
for _ in range(k):
# 找到最小值的索引
min_index = flowers.index(min(flowers))
# 将最小值加1
flowers[min_index] += 1
# 计算乘积
result = 1
for flower in flowers:
result *= flower
# 输出结果
print(result)
- Java
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt(); // 读取测试数据组数
for (int t = 0; t < T; t++) {
// 读取每组测试数据
int[] flowers = new int[4];
for (int i = 0; i < 4; i++) {
flowers[i] = scanner.nextInt();
}
int k = scanner.nextInt();
// 进行k次操作
for (int i = 0; i < k; i++) {
Arrays.sort(flowers); // 排序以找到最小值
flowers[0]++; // 将最小值加1
}
// 计算乘积
long result = 1;
for (int flower : flowers) {
result *= flower;
}
// 输出结果
System.out.println(result);
}
}
}
- Cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int T;
cin >> T; // 读取测试数据组数
while (T--) {
vector<int> flowers(4);
int k;
// 读取每组测试数据
for (int i = 0; i < 4; i++) {
cin >> flowers[i];
}
cin >> k;
// 进行k次操作
for (int i = 0; i < k; i++) {
auto min_it = min_element(flowers.begin(), flowers.end());
(*min_it)++; // 将最小值加1
}
// 计算乘积
long long result = 1;
for (int flower : flowers) {
result *= flowe
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的