给定n个元素的数组。任务是通过选择数组的两个子序列(不一定不同)来打印最大和,以使第一子序列的所有元素的按位与与第二子序列的所有元素的按位与之和最大。
例子:
Input: arr[] = {3, 5, 6, 1}
Output: 13
We get maximum AND value by choosing 6 only and maximum OR value by choosing all (3 | 5 | 6 | 1) = 7. So the result is 6 + 7 = 13.
Input: arr[] = {3, 3}
Output: 6
方法:最大或将是所有数字中的或,最大与将是数组中的最大元素。之所以这样,是因为如果(x | y)> = x,y而(x&y)<= x,y。
C++
//C++ implementation of above approach
#include
using namespace std;
//function to find the maximum sum
void maxSum(int a[],int n)
{
int maxAnd=0;
//Maximum And is maximum element
for(int i=0;i
Java
import java.util.Arrays;
// Java implementation of the above approach
// Function to find the maximum sum
class GFG {
static void maxSum(int[] a, int n) {
// Maximum AND is maximum element
int maxAnd = Arrays.stream(a).max().getAsInt();
// Maximum OR is bitwise OR of all.
int maxOR = 0;
for (int i = 0; i < n; i++) {
maxOR |= a[i];
}
System.out.println((maxAnd + maxOR));
// Driver code
}
public static void main(String[] args) {
int n = 4;
int[] a = {3, 5, 6, 1};
maxSum(a, n);
}
}
//This code contributed by 29AjayKumar
Python3
# Python implementation of the above approach
# Function to find the maximum sum
def maxSum(a, n):
# Maximum AND is maximum element
maxAnd = max(a)
# Maximum OR is bitwise OR of all.
maxOR = 0
for i in range(n):
maxOR|= a[i]
print(maxAnd + maxOR)
# Driver code
n = 4
a = [3, 5, 6, 1]
maxSum(a, n)
C#
// C# implementation of the above approach
using System;
using System.Linq;
public class GFG {
// Function to find the maximum sum
static void maxSum(int []a, int n) {
// Maximum AND is maximum element
int maxAnd = a.Max();
// Maximum OR is bitwise OR of all.
int maxOR = 0;
for (int i = 0; i < n; i++) {
maxOR |= a[i];
}
Console.Write((maxAnd + maxOR));
// Driver code
}
public static void Main() {
int n = 4;
int[] a = {3, 5, 6, 1};
maxSum(a, n);
}
}
//This code contributed by 29AjayKumar
PHP
输出:
13