import
java.util.*;
import
java.io.*;
class
GFG{
public
static
int
maximumSum(ArrayList<ArrayList<Integer>> prefixSum,
ArrayList<ArrayList<Integer>> dp,
int
K,
int
N,
int
rem,
int
id)
{
int
ans = Integer.MIN_VALUE;
if
(rem ==
0
)
return
0
;
if
(id >= N || rem <
0
)
return
ans;
if
(dp.get(id).get(rem) != -
1
)
return
dp.get(id).get(rem);
for
(
int
i =
0
; i <= K; i++) {
ans = Math.max(ans, prefixSum.get(id).get(i) +
maximumSum(prefixSum, dp, K, N, rem - i, id +
1
));
}
return
ans;
}
public
static
void
findSum(ArrayList<ArrayList<Integer>> arr,
int
N,
int
K,
int
P)
{
ArrayList<ArrayList<Integer>> prefixSum =
new
ArrayList<ArrayList<Integer>>();
for
(
int
i =
0
; i < N ; i++){
prefixSum.add(
new
ArrayList<Integer>());
for
(
int
j =
0
; j <= K ; j++){
prefixSum.get(i).add(
0
);
}
}
ArrayList<ArrayList<Integer>> dp =
new
ArrayList<ArrayList<Integer>>();
for
(
int
i =
0
; i < N ; i++){
dp.add(
new
ArrayList<Integer>());
for
(
int
j =
0
; j <= P ; j++){
dp.get(i).add(-
1
);
}
}
for
(
int
i =
0
; i < arr.size() ; i++) {
Collections.sort(arr.get(i));
Collections.reverse(arr.get(i));
}
for
(
int
i =
0
; i < N; i++) {
int
sum =
0
;
for
(
int
j =
1
; j <= K; j++) {
sum += arr.get(i).get(j -
1
);
prefixSum.get(i).set(j, sum);
}
}
System.out.println(maximumSum(prefixSum, dp, K, N, P,
0
));
}
public
static
void
main(String args[])
{
ArrayList<ArrayList<Integer> > arr =
new
ArrayList<ArrayList<Integer>>(
List.of(
new
ArrayList<Integer>(List.of(
80
,
80
) ),
new
ArrayList<Integer>(List.of(
15
,
50
) ),
new
ArrayList<Integer>(List.of(
20
,
10
) )
)
);
int
N = arr.size();
int
M = arr.get(
0
).size();
int
K =
3
;
findSum(arr, N, M, K);
}
}