Google Kick Start Question

Problem

Dr. Patel has N stacks of plates. Each stack contains K plates. Each plate has a positive beauty value , describing how beautiful it looks.

Dr. Patel would like to take exactly P plates to use for dinner tonight. If he would like to take a plate in a stack, he must also take all of the plates above it in that stack as well.

Help Dr. Patel pick the P plates that would maximize the total sum of beauty values.

Input

The first line of the input gives the number of test cases, T . T test cases follow. Each test case begins with a line containing the three integers N , K and P . Then, N lines follow. The i-th line contains K integers, describing the beauty values of each stack of plates from top to bottom.

Output

For each test case, output one line containing Case #x: y , where x is the test case number (starting from 1) and y is the maximum total sum of beauty values that Dr. Patel could pick.

Limits

Time limit: 20 seconds per test set.
Memory limit: 1GB.
1 ≤ T ≤ 100.
1 ≤ K ≤ 30.
1 ≤ PN * K .
The beauty values are between 1 and 100, inclusive.

Test set 1

1 ≤ N ≤ 3.

Test set 2

1 ≤ N ≤ 50.

Sample

Input Output
2 2 4 5 10 10 100 30 80 50 10 50 3 2 3 80 80 15 50 20 10 Case #1: 250 Case #2: 180

In Sample Case #1, Dr. Patel needs to pick P = 5 plates:

  • He can pick the top 3 plates from the first stack (10 + 10 + 100 = 120).
  • He can pick the top 2 plates from the second stack (80 + 50 = 130) .

In total, the sum of beauty values is 250.

In Sample Case #2, Dr. Patel needs to pick P = 3 plates:

  • He can pick the top 2 plates from the first stack (80 + 80 = 160).
  • He can pick no plates from the second stack.
  • He can pick the top plate from the third stack (20).

In total, the sum of beauty values is 180.

Note: Unlike previous editions, in Kick Start 2020, all test sets are visible verdict test sets, meaning you receive instant feedback upon submission.

This is the question from Google Kick Start. Pls help me in this question. Thanks in advance :grinning:

I don’t whether it’s correct or wrong but its working for the test cases…

for some in range(int(input())):

n, k, p = map(int, input().split())

stacks = []

for _ in range(n):

    stacks.append(list(map(int , input().split())))

temp_stack = []

for z in range(n):

    temp_stack.append([0]*p)

maxed = 0

for i in range(n):

    for j in range(1, k+1):

        temp_stack[i][j] = stacks[i][:j]

for i in temp_stack:

    i.remove(0)

for s in temp_stack:

    for q in temp_stack:

        for x in s:

            for y in q:

                    if len(x) + len(y) == p: 

                        if temp_stack.index(q) != temp_stack.index(s):

                            

                            if sum(y+x) > maxed:

                                maxed = sum(y+x)

print("Case #{0}: {1}".format(some+1, maxed))

Happy coding…

Can you please explain your approach?