Возьмите i в качестве текущего числа игроков из n игроков, а j в качестве текущей оставшейся зарплаты. Возьмем m [i, j] как динамический набор решений.
Then m[i, 0] = 0, m[0, j] = 0
and
m[i, j] = m[i - 1, j] if salary for player i is greater than j
else
m[i, j] = max ( m[i - 1, j], m[i - 1, j - salary of player i] + PPG of player i)
Извините, что я не знаю R, но я хорошо разбираюсь в алгоритмах, поэтому я надеюсь, что это поможет.
Дальнейшая оптимизация, которую вы можете сделать, заключается в том, что вам действительно нужны только 2 строки m [i, j], потому что решение DP использует только текущую строку и последнюю строку (вы можете сэкономить память таким образом)