# Maximum sum by adding numbers with same number of set bits

Given an array of N numbers, the task is to find the maximum sum that can be obtained by adding numbers with the same number of set bits.

Examples:

Input: 32 3 7 5 27 28
Output: 34

Input: 2 3 8 5 6 7
Output: 14 ## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• Traverse in the array and count the number of set bits for every element.
• Initialize an array for 32 bits, assuming the number to have a maximum of 32 set bits.
• Iterate in the array and add the array element to the position which indicates the number of set bits.
• Traverse and find the maximum sum and return it.

Below is the implementation of the above approach:

## C++

 `// C++ program to find maximum sum ` `// by adding numbers with same number of set bits ` `#include ` `using` `namespace` `std; ` ` `  `// count the number of bits ` `// for each element of array ` `int` `bit_count(``int` `n) ` `{ ` `    ``int` `count = 0; ` ` `  `    ``// Count the number of set bits ` `    ``while` `(n) { ` `        ``count++; ` ` `  `        ``n = n & (n - 1); ` `    ``} ` ` `  `    ``return` `count; ` `} ` ` `  `// Function to return the ` `// the maximum sum ` `int` `maxsum(``int` `arr[], ``int` `n) ` `{ ` `    ``int` `bits[n]; ` ` `  `    ``// Calculate the ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``bits[i] = bit_count(arr[i]); ` `    ``} ` ` `  `    ``// Assuming the number to be ` `    ``// a maximum of 32 bits ` `    ``int` `sum = { 0 }; ` ` `  `    ``// Add the number to the ` `    ``// number of set bits ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``sum[bits[i]] += arr[i]; ` `    ``} ` ` `  `    ``int` `maximum = 0; ` ` `  `    ``// Find the maximum sum ` `    ``for` `(``int` `i = 0; i < 32; i++) { ` ` `  `        ``maximum = max(sum[i], maximum); ` `    ``} ` ` `  `    ``return` `maximum; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` ` `  `    ``int` `arr[] = { 2, 3, 8, 5, 6, 7 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``cout << maxsum(arr, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find maximum sum ` `// by adding numbers with same number of set bits ` ` `  `class` `GFG ` `{ ` `// count the number of bits ` `// for each element of array ` `static` `int` `bit_count(``int` `n) ` `{ ` `    ``int` `count = ``0``; ` ` `  `    ``// Count the number of set bits ` `    ``while` `(n>``0``) ` `    ``{ ` `        ``count++; ` ` `  `        ``n = n & (n - ``1``); ` `    ``} ` ` `  `    ``return` `count; ` `} ` ` `  `// Function to return the ` `// the maximum sum ` `static` `int` `maxsum(``int``[] arr, ``int` `n) ` `{ ` `    ``int``[] bits=``new` `int``[n]; ` ` `  `    ``// Calculate the ` `    ``for` `(``int` `i = ``0``; i < n; i++)  ` `    ``{ ` `        ``bits[i] = bit_count(arr[i]); ` `    ``} ` ` `  `    ``// Assuming the number to be ` `    ``// a maximum of 32 bits ` `    ``int``[] sum=``new` `int``[``32``]; ` ` `  `    ``// Add the number to the ` `    ``// number of set bits ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `    ``{ ` `        ``sum[bits[i]] += arr[i]; ` `    ``} ` ` `  `    ``int` `maximum = ``0``; ` ` `  `    ``// Find the maximum sum ` `    ``for` `(``int` `i = ``0``; i < ``32``; i++) ` `    ``{ ` ` `  `        ``maximum = Math.max(sum[i], maximum); ` `    ``} ` ` `  `    ``return` `maximum; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main (String[] args) ` `{ ` `    ``int``[] arr = { ``2` `,``3` `, ``8``, ``5``, ``6``, ``7` `}; ` `    ``int` `n = arr.length; ` `    ``System.out.println(maxsum(arr, n)); ` ` `  `} ` `} ` ` `  `// This Code is contributed by mits `

## Python3

 `# Python3 program to find maximum ` `# sum by adding numbers with ` `# same number of set bits ` ` `  `# count the number of bits ` `# for each element of array ` `def` `bit_count(n): ` `    ``count ``=` `0``; ` ` `  `    ``# Count the number ` `    ``# of set bits ` `    ``while` `(n > ``0``): ` `        ``count ``+``=` `1``; ` ` `  `        ``n ``=` `n & (n ``-` `1``); ` ` `  `    ``return` `count; ` ` `  `# Function to return the ` `# the maximum sum ` `def` `maxsum(arr, n): ` `    ``bits ``=` `[``0``] ``*` `n; ` ` `  `    ``# Calculate the ` `    ``for` `i ``in` `range``(n):  ` `        ``bits[i] ``=` `bit_count(arr[i]); ` ` `  `    ``# Assuming the number to be ` `    ``# a maximum of 32 bits ` `    ``sum` `=` `[``0``] ``*` `32``; ` ` `  `    ``# Add the number to the ` `    ``# number of set bits ` `    ``for` `i ``in` `range``(n):  ` `        ``sum``[bits[i]] ``+``=` `arr[i]; ` ` `  `    ``maximum ``=` `0``; ` ` `  `    ``# Find the maximum sum ` `    ``for` `i ``in` `range``(``32``): ` ` `  `        ``maximum ``=` `max``(``sum``[i], maximum); ` ` `  `    ``return` `maximum; ` ` `  `# Driver code ` `arr ``=` `[ ``2``, ``3``, ``8``, ``5``, ``6``, ``7` `]; ` `n ``=` `len``(arr); ` `print``(maxsum(arr, n)); ` ` `  `# This code is contributed by mits `

## C#

 `// C# program to find maximum  ` `// sum by adding numbers with  ` `// same number of set bits ` `using` `System; ` ` `  `class` `GFG ` `{ ` `// count the number of bits ` `// for each element of array ` `static` `int` `bit_count(``int` `n) ` `{ ` `    ``int` `count = 0; ` ` `  `    ``// Count the number ` `    ``// of set bits ` `    ``while` `(n > 0) ` `    ``{ ` `        ``count++; ` ` `  `        ``n = n & (n - 1); ` `    ``} ` ` `  `    ``return` `count; ` `} ` ` `  `// Function to return the ` `// the maximum sum ` `static` `int` `maxsum(``int``[] arr, ``int` `n) ` `{ ` `    ``int``[] bits = ``new` `int``[n]; ` ` `  `    ``// Calculate the ` `    ``for` `(``int` `i = 0; i < n; i++)  ` `    ``{ ` `        ``bits[i] = bit_count(arr[i]); ` `    ``} ` ` `  `    ``// Assuming the number to be ` `    ``// a maximum of 32 bits ` `    ``int``[] sum = ``new` `int``; ` ` `  `    ``// Add the number to the ` `    ``// number of set bits ` `    ``for` `(``int` `i = 0; i < n; i++) ` `    ``{ ` `        ``sum[bits[i]] += arr[i]; ` `    ``} ` ` `  `    ``int` `maximum = 0; ` ` `  `    ``// Find the maximum sum ` `    ``for` `(``int` `i = 0; i < 32; i++) ` `    ``{ ` `        ``maximum = Math.Max(sum[i], maximum); ` `    ``} ` ` `  `    ``return` `maximum; ` `} ` ` `  `// Driver code ` `static` `void` `Main() ` `{ ` `    ``int``[] arr = { 2 ,3 , 8, 5, 6, 7 }; ` `    ``int` `n = arr.Length; ` `    ``Console.WriteLine(maxsum(arr, n)); ` `} ` `} ` ` `  `// This Code is contributed by mits `

## PHP

 ` `

Output:

```14
```

Time Complexity: O(N * 32)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : Mithun Kumar

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.