Имя пользователя:
Пароль:
 

Показать сообщение отдельно

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Ну тогда всё просто. (Если среда нормальная 32-битная и не проблема выделить 5 метров памяти).

Примерно так.
Код: Выделить весь код
int sum = 0;
int i, j;
for (i = 0; i < size; ++i)
    sum += NUM[i];

int *way = new int[sum+1];
for (i = 0; i < size; ++i)
    way = 0;

way[0] = 1;

for (i = 0; i < size; ++i)
    for (j = sum; j > 0; --j)
        if (j >= NUM[i] && way[j-NUM[i]] != 0)
            way[j] = NUM[i];

// n - требуемая сумма
if (!way[n])
    printf("Всё плохо\n");
else
{
    printf("Всё хорошо, путь:\n");
    for (i = n; i != 0; i -= way[i])
        printf("%d\n", way[i]);
}

delete[] way;
Не проверял, так как сейчас времени нет. Вечером может проверю. Но идея ясна, я надеюсь.

-------
http://ivank.ru


Последний раз редактировалось ivank, 14-09-2006 в 16:57.


Отправлено: 12:24, 14-09-2006 | #9