按照题意进行操作,只能选择将一个加号变为乘号,枚举将每个加号变为乘号,然后取最大值即可。
这里可以先求出来所有数的和,然后减去要进行乘法的两个数的和,再加上其乘积即可。
时间复杂度:O(n)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<long long> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
long long s = accumulate(a.begin(), a.end(), 0ll);
long long ans = s;
for (int i = 0; i < n - 1; i++) {
ans = max(ans, s - a[i] - a[i + 1] + a[i] * a[i + 1]);
}
cout << ans << "\n";
return 0;
}
n = int(input())
a = list(map(int, input().split()))
s = sum(a)
ans = s
for i in range(n-1):
ans = max(ans, s - a[i] - a[i + 1] + a[i] * a[i + 1])
print(ans)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
long[] a = new long[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextLong();
}
long s = 0;
for (long num : a) {
s += num;
}
long ans = s;
for (int i = 0; i < n - 1; i++) {
ans = Math.max(ans, s - a[i] - a[i + 1] + a[i] * a[i + 1]);
}
System.out.println(ans);
}
}
小美有一个长度为 n 的数组 a ,默认的求和方式是将 a 中所有元素加起来。
但是小美有一种技能,可以将求和的其中一次加法转换为乘法操作。
在这种情况下,数组 a 的最大和为多少。
第一行,一个正整数 n(1≤n≤105) ,表示数组 a 的大小
第二行,n 个正整数 ai(1≤ai≤109)
一个整数,表示最大和。
输入
3
1 2 3
输出
7
说明
1+2+3=6,1×2+3=5,1+2×3=7
所以最大和为 7