Algorithm to choose the best team of 6 Pokémon given a constraint
You could use A* to solve this problem.  A* is designed to optimally search through a state space to solve a problem based on trying to minimize a "cost."

The first thing I'd do is reframe the problem.  Instead of thinking in terms of time and DPS, use time and "damage" by multiplying them together.  I recommend this because that's the term you're trying to maximize.  It'll make it clearer.

Let's define a "state" in this A* algorithm as a team of 0-6 Pokemon, and their total damage.  State transitions consist of adding Pokemon to the team, updating the total damage.  Don't forget that this is a combination problem, not a permutation problem.  Team ABCDEF is the same as team FEDCBA.  The easy way to handle this is to sort by name when adding to the team. (And as a small optimization, if you care, 50 pokemon is small enough to fit into a 64-bit integer, so your teams could be defined by a datastructure as small as an int)

To fit this problem to A*, we have to define a goal function.  The goal function defines an "acceptable" solution, but saying nothing about whether its the best solution.  The goal function is a team of 6 Pokemon that has a total time greater than 300.  This will satisfy your constraint.

We can handle your goal of maximizing damage by using it as our "cost" metric.  A simple way to do this is to say the "cost" is equal to $-damage$, that is to say that it's always a negative number.  A* doesn't mind the final cost being negative.

The last thing you need for A* is the "heuristic underestimate."  You need an estimated cost for finishing out the team that is always an underestimate (a lower "cost" than the real answer, which means a higher damage than the real best answer).  This can easily be constructed by finding a "best damage team" using the remaining Pokemon, ignoring the time constraint.

Put those together, and A* will do the rest.  A* is "optimal," meaning that it is the most efficient algorithm you can come up with given the information provided.  Any more ideal algorithm will need to use more information than what we gave A* (i.e. more than just a cost function and a heuristic underestimate).