using
System;
using
System.Collections.Generic;
public
class
Solution
{
static
int
[,] dp =
new
int
[10005, 1001];
static
int
Solver(List<
int
[]> grp,
int
i,
int
maxAge)
{
if
(i >= grp.Count)
{
return
0;
}
if
(dp[i, maxAge] != -1)
{
return
dp[i, maxAge];
}
if
(grp[i][1] >= maxAge)
{
return
(dp[i, maxAge] = Math.Max(
grp[i][0] + Solver(grp, i + 1, grp[i][1]),
Solver(grp, i + 1, maxAge)
));
}
return
(dp[i, maxAge] = Solver(grp, i + 1, maxAge));
}
static
int
BestTeamGrade(
int
[] grades,
int
[] ages)
{
List<
int
[]> grp =
new
List<
int
[]>();
for
(
int
i = 0; i < grades.Length; i++)
{
grp.Add(
new
int
[] { grades[i], ages[i] });
}
grp.Sort((a, b) => a[0].CompareTo(b[0]));
return
Solver(grp, 0, 0);
}
public
static
void
Main(
string
[] args)
{
int
[] grades = { 1, 2, 3, 4 };
int
[] ages = { 4, 3, 2, 1 };
for
(
int
i = 0; i < 10005; i++)
{
for
(
int
j = 0; j < 1001; j++)
{
dp[i, j] = -1;
}
}
Console.WriteLine(BestTeamGrade(grades, ages));
}
}