Team Play Team Play

Two teams of robots are playing the game of cut-or-bend. The rules of the game are very simple:

  • The team that has processed more details than its opponent is a winner.
  • A detail is considered to be processed if it is either bent or cut.
  • Each robot can perform both bending and cutting, but during the game it can perform only one of two functions.
  • Each team consists of N players, K of them must be occupied with cutting. All the rest must be occupied with bending.
Suppose you are the coach of one of these teams. You are given two lists of positive integers both of size N representing stats of your team. The i-th value in the first list is the number of details that can be cut by the i-th member of the team during the game. Similarly, the i-th value in the second list is the number of details which can be bent by the i-th member of the team during the game. Knowing the value of K, calculate the maximum score which can be obtained by your team.

Input: Three arguments. Two lists of integers of equal size representing team's stats. An integer - a number of team's members that have to be occupied with cutting.

Output: An integer - the maximum score which can be obtained by the team.


Consider having input to be [4, 2, 1], [2, 5, 3], 2. The best score is obtained by assigning the first and the third robots to perform cutting and the second robot to perform bending.
cut : [4, _, 1] -> total:  5
bend: [_, 5, _] -> total:  5
                   total: 10
max_score([4, 2, 1], [2, 5, 3], 2) == 10
max_score([7, 1, 4, 4], [5, 3, 4, 3], 2) == 18
max_score([5, 5, 5], [5, 5, 5], 1) == 15

How it’s used: This is a discrete optimization puzzle. As Leonhard Euler has stated, "Nothing in the world takes place without optimization, and there is no doubt that all aspects of the world that have a rational basis can be explained by optimization methods."

3 ≤ N ≤ 50
1 ≤ K ≤ N - 1
1 ≤ list[i] ≤ 100