Team Building
Contest: CodeCraft-20 (Div. 2)
Difficulty rating: 2300
Tags: bitmasks, dp, greedy, sortings

Alice, the president of club FCB, wants to build a team for the new volleyball tournament. The team should consist of $$$p$$$ players playing in $$$p$$$ different positions. She also recognizes the importance of audience support, so she wants to select $$$k$$$ people as part of the audience.

There are $$$n$$$ people in Byteland. Alice needs to select exactly $$$p$$$ players, one for each position, and exactly $$$k$$$ members of the audience from this pool of $$$n$$$ people. Her ultimate goal is to maximize the total strength of the club.

The $$$i$$$-th of the $$$n$$$ persons has an integer $$$a_{i}$$$ associated with him — the strength he adds to the club if he is selected as a member of the audience.

For each person $$$i$$$ and for each position $$$j$$$, Alice knows $$$s_{i, j}$$$  — the strength added by the $$$i$$$-th person to the club if he is selected to play in the $$$j$$$-th position.

Each person can be selected at most once as a player or a member of the audience. You have to choose exactly one player for each position.

Since Alice is busy, she needs you to help her find the maximum possible strength of the club that can be achieved by an optimal choice of players and the audience.

Input format:
The first line contains $$$3$$$ integers $$$n,p,k$$$ ($$$2 \leq n \leq 10^{5}, 1 \leq p \leq 7, 1 \le k, p+k \le n$$$).

The second line contains $$$n$$$ integers $$$a_{1},a_{2},\ldots,a_{n}$$$. ($$$1 \leq a_{i} \leq 10^{9}$$$).

The $$$i$$$-th of the next $$$n$$$ lines contains $$$p$$$ integers $$$s_{i, 1}, s_{i, 2}, \dots, s_{i, p}$$$. ($$$1 \leq s_{i,j} \leq 10^{9}$$$)

Output format:
Print a single integer $$${res}$$$  — the maximum possible strength of the club.

Constraints:
Time limit: 3.0 s
Memory limit: 256.0 MB

Note:
In the first sample, we can select person $$$1$$$ to play in the $$$1$$$-st position and persons $$$2$$$ and $$$3$$$ as audience members. Then the total strength of the club will be equal to $$$a_{2}+a_{3}+s_{1,1}$$$.

Example input:
4 1 2
1 16 10 3
18
19
13
15

Example output:
44

Example input:
6 2 3
78 93 9 17 13 78
80 97
30 52
26 17
56 68
60 36
84 55

Example output:
377

Editorial:
Idea is DP(bitmask)
First sort the people in non-increasing order of $$$a_{i}$$$.
let $$$dp[i][mask]$$$ = maximum strength of the club if we choose players from $$$1 \ldots i$$$, mask tells us about the positions in the team which have been covered. Don't worry about the audience part as of now, we will see how it is handled during transitions.
$$$dp[0][0]=0$$$ — initial state.
Lets try to find $$$dp[i][mask]$$$
If the $$$i$$$-th person is chosen to play in $$$j$$$-th position, $$$dp[i][mask] = dp[i-1][mask \oplus 2^j] + s_{i,j}$$$ — $$$(1)$$$.
If we don't choose $$$i$$$ as a player, then we can take him as an audience member or not take him at all. I claim that if the no. of audience members chosen till now < $$$k$$$, then we must select $$$i$$$ as an audience member , We can prove this. If we don't select $$$i$$$ as audience, we will need to select some $$$j$$$ ($$$j>i$$$), strength in that case will include $$$a_j$$$ but not $$$a_i$$$ , but as $$$a_i \geq a_j$$$, it is always better to select $$$i$$$.
We now need to know how many audience members have been selected for state $$$(i-1,mask)$$$.
let $$$c$$$ be the no. of persons who have not been selected as players, then $$$c$$$ = $$$i-1$$$ - no. of set bits in mask.By the above logic, we can say that if $$$c \geq k $$$, we have chosen already k audience members.
So, the solution becomes:
if $$$c < k$$$ , then $$$dp[i][mask] = dp[i-1][mask] + a_i$$$ — (2), else $$$dp[i][mask] = dp[i-1][mask]$$$ — (2),
You need to choose maximum of $$$(1)$$$ and $$$(2)$$$ as $$$dp[i][mask]$$$. $$$dp[n][2^p-1]$$$ would be the answer to our question.
Time Complexity : $$$O(n \cdot p \cdot 2^p)$$$.