金苹果岛上的代码挑战:最大化你的代码能力

题目描述

你是一位代码勇者,来到了传说中的金苹果岛。岛上有两种神奇的苹果:

  • 红苹果: 随处可见,每个红苹果都能提升你的代码能力,但提升程度不一,有的甚至会降低你的能力!* 金苹果: 稀有而美味,每个金苹果都能使你的代码能力直接翻倍!

你的初始代码能力为 1。现在,苹果仙子热情地招待你,提供了 n 个红苹果和 m 个金苹果。你必须吃光所有的苹果,但你可以自由选择吃金苹果的时机。

挑战: 你需要找到一种吃苹果的最佳策略,使得你在离开金苹果岛时拥有最高的代码能力!

输入格式

第一行包含两个正整数 n (1 ≤ n ≤ 10^5) 和 m (0 ≤ m ≤ 10),分别表示红苹果和金苹果的数量。

第二行包含 n 个整数 _a_1, _a_2, ..., a_n (-10 ≤ a_i ≤ 10),表示每个红苹果对代码能力的影响。

输出格式

输出一个整数,表示你能获得的最高代码能力值。

样例

输入样例 1

6 21 -2 3 1 -6 5

输出样例 1

15

样例 1 解释

最佳策略是:

  1. 吃掉红苹果:1, -2, 3, 1,代码能力变为 4。2. 吃掉 2 个金苹果,代码能力变为 16。3. 吃掉剩余的红苹果:-6, 5,最终代码能力为 15。

提示

  • 贪心策略: 金苹果的效果是翻倍,所以越早吃越好。 尝试先找到红苹果中提升能力最大的一个,在吃金苹果之前吃掉它。* 考虑负面影响: 一些红苹果可能会降低你的代码能力,你需要谨慎选择吃苹果的顺序。

子任务

  • 子任务 1 (10%): a_i ≥ 0,所有红苹果都提升代码能力。* 子任务 2 (30%): m = 0,没有金苹果。* 子任务 3 (70%): m = 1,只有一个金苹果。* 子任务 4 (100%): n ≤ 10^5, m ≤ 10, |a_i| ≤ 10。

C++ 贪心算法代码示例cpp#include #include #include

using namespace std;

int main() { int n, m; cin >> n >> m; vector red_apples(n); for (int i = 0; i < n; ++i) { cin >> red_apples[i]; } // 找到能够提升代码能力最大的红苹果 int max_red_apple = *max_element(red_apples.begin(), red_apples.end()); red_apples.erase(remove(red_apples.begin(), red_apples.end(), max_red_apple), red_apples.end()); // 计算初始代码能力 int code_ability = 1 + max_red_apple; // 吃掉金苹果 for (int i = 0; i < m; ++i) { code_ability *= 2; } // 吃掉剩余的红苹果 for (int i = 0; i < red_apples.size(); ++i) { code_ability += red_apples[i]; } cout << code_ability << endl; return 0;}

金苹果岛上的代码挑战:最大化你的代码能力

原文地址: https://www.cveoy.top/t/topic/fM1l 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录