dp[i - coin] это магия которая говорит а есть ли решение для текущего k[i] - coin (те на эту монету меньше) если есть, а вот это решение + текущая монета более меньшая последовательность чем то что уже записано на текущем шаге dp[i] если dp[i] null - то решение не было еще найдено - пишем сразу если dp[i] большая последовательность - то пишем значение с предыдущего шага + текущая монета