金苹果岛 - 代码能力最大化

代码勇者来到了金苹果岛上,金苹果岛上有两种苹果:随处可见的红苹果与稀有美味的金苹果。

勇者的'初始代码能力为 $1$',他每吃下一个红苹果,代码能力就会得到一定程度的提升(每个红苹果带来的提升可能是不同的,甚至也可能是负的);他每吃下一个金苹果,代码能力就会直接'翻倍'(每个金苹果的效果都是完全相同的)。

岛上的苹果仙子用 $n$ 个红苹果和 $m$ 个金苹果招待了勇者,勇者必须吃光所有苹果。勇者必须按照仙子'规定的顺序'吃红苹果,但是他可以'自由安排'什么时候吃金苹果(可以在吃'任意'一个红苹果之前或之后吃'若干'个金苹果)。

求勇者在离开金苹果岛的时候的代码能力的最大值。

输入格式

第一行输入两个正整数 $n$($n\le10^5$)和 $m$($ m\le10$)。

第二行输入 $n$ 个整数 $a_i$($|a_i|\le10$)。

输出格式

输出一个整数,表示勇者在离开金苹果岛的时候的代码能力的最大值。

样例 #1

样例输入 #1

6 2
1 -2 3 1 -6 5

样例输出 #1

15

样例 #2

样例输入 #2

8 3
5 -3 -8 2 4 -11 9 1

样例输出 #2

42

提示

样例1解释

勇者吃掉红苹果 $1,-2,3,1$,代码能力变为 $4$;

勇者吃掉 $2$ 颗金苹果,代码能力变为 $16$;

勇者吃掉红苹果 $-6,5$,代码能力变为 $15$。

这是勇者的最优方案。

子任务

对于 $10%$ 的数据,$a_i\ge0$;

对于 $30%$ 的数据,$m=0$;

对于 $70%$ 的数据,$m=1$;

对于 $100%$ 的数据,$n\le10^5,m\le10,|a_i|\le10$。

C++ 代码

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    int a[n];
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    long long max_ability = 1;
    for (int i = 0; i < n; ++i) {
        max_ability = max(max_ability + a[i], max_ability);
    }
    max_ability *= (1LL << m); // 等价于 max_ability *= pow(2, m);
    cout << max_ability << endl;
    return 0;
}

Python 代码

n, m = map(int, input().split())
apples = list(map(int, input().split()))

max_ability = 1
for apple in apples:
    max_ability = max(max_ability + apple, max_ability)

max_ability *= 2 ** m

print(max_ability)
金苹果岛 - 代码能力最大化

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

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