24 aug 2014 00:30Було б чудово якби дехто цей дуже простий алгоритм обдумав і написав самостійно, а не намагався злизати звідки :)
Ви ж, мабуть, намагаєтеся програму навчитися - самі розумієте тут важливо розбиратися і винаходити самостійно - зате потім все буде дуже легко.
Вам насправді не всі підмножини потрібні, тому у вас ще буде відсікання.
Можете спробувати вирішити такі підзавдання:
1. Рекурсивно згенерувати перелік різних комбінацій по 3 з N треків (можливо з повторами), тобто.
трек1, трек1, трек1 трек1, трек1, трек2 трек1, трек1, трек3 трек1, трек1, трек4 трек1, трек2, трек1 . трек4, трек4, трек4
2. Переробити так, щоб повторів був. Для цього достатньо щоб усередині комбінації кожен наступний трек був більшим (за номером)
трек1, трек2, трек3 трек1, трек2, трек4 . трек2, трек3, трек4
3.Переробити цей алгоритм щоб виводилися тільки комбінації у яких сумарний час менший за заданий.
4. Переробити алгоритм, що вийшов, щоб комбінації не обмежувалися 3 треками, а заходили вглиб рекурсії поки не вийдуть за межі часу.
Якось так. Звичайно тут кілька зайвої роботи вийде, зате рекурсія в голові добре осяде.