Да, такой алгоритм есть. Наивно: начиная с 1, пробуйте каждую возможную комбинацию штампов, пока не найдете комбинацию, которая дает сумму 1, затем попробуйте 2 и так далее. Ваш алгоритм завершает работу, когда находит номер, такой, что ни одна комбинация штампов не добавляет к этому числу.
Хотя, возможно, медленно, для достаточно небольших проблем (скажем, 100 штампов, 10 позиций) вы можете решить эту проблему за «разумное» время ...
Но для больших задач, когда у нас есть много доступных марок (скажем, 1000 с) и много возможных позиций (скажем, 1000 с), этот алгоритм может занять много времени. То есть, для очень больших проблем время для решения проблемы с помощью этого подхода может быть, скажем, временем жизни вселенной, и, таким образом, оно не очень полезно для вас.
Если у вас действительно большие проблемы, вам нужно найти способы ускорить поиск, эти ускорения называются эвристикой. Вы не можете победить проблему, но вы можете решить проблему быстрее, чем наивный подход, применяя какие-то знания предметной области.
Простой способ улучшить этот наивный подход может заключаться в том, что всякий раз, когда вы пытаетесь использовать комбинацию штампов, не равную искомому числу, вы удаляете эту комбинацию из возможного набора, чтобы попытаться использовать любое будущее число, и пометить этот будущий номер как недоступный. Скажем по-другому: сохраняйте список номеров, которые вы уже нашли, и комбинации, в которых вы оказались, затем больше не ищите эти цифры или их комбинации.