#include <stdio.h>
int maxProduct(int arr[], int n) {
int max_product = arr[0];
int min_product = arr[0];
int result = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < 0) {
// 交换最大值和最小值
int temp = max_product;
max_product = min_product;
min_product = temp;
}
max_product = (arr[i] > max_product * arr[i]) ? arr[i] : max_product * arr[i];
min_product = (arr[i] < min_product * arr[i]) ? arr[i] : min_product * arr[i];
result = (max_product > result) ? max_product : result;
}
return (result < 0) ? -1 : result;
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int max_product = maxProduct(arr, n);
printf("%d\n", max_product);
return 0;
}
题目给出的数据这么小,直接用DFS解决就行了,每一个数都有选或者不选两个状态
用到的思想—蛮力法
博主用到的环境:Win7, CodeBlocks等。