📜  查找具有最大按位与和按位或的子序列

📅  最后修改于: 2021-05-04 07:14:46             🧑  作者: Mango

给定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