|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Ihor Bobak 2:5020/400 24 May 2001 00:20:59 To : All Subject : a[i1]+a[i2]+...+a[ik] = N*p -------------------------------------------------------------------------------- Есть такая задача: дано масив N чисел a[1], a[2],..., a[N]. Из него нужно выбрать такое подмножество из k<=N элементов, чтобы a[i1] + a[i2] + ... + a[ik] делилось на N (если такое подмножество существует вообще) Так как N может быть довольно большим (около 10000), то перебор в лоб (то есть "брать элемент - не брать") дающий сложность О(2^N) есть недопустимым. Кто нибудь знает нормальный алгоритм решения этой задачи? Оговорюсь сразу: никакое a[i] не равно по модулю N (иначе задача решается просто - искомое подможество состоит из одного элемента), и вообще без ограничения общности можно считать, что a[i] < N. Примеры: N=5, a[] = {1,1,2,3,3} - искомое подмножество 1+1+3=5 делится на 5 (один вариант решения), 2+3=5 делится на 5 (другой вариант) N=8, a[] = {5,5,5,5,5,5,5,5} - искомое подмножество = все числа a[], так как их сумма (=40) делится на 8; больше решений нет; N=8, a[] = {6,7,7,7,7,7,7,7} - искомое подмножество = 6+7+7+7+7+7+7=48 делится на 8; --- ifmail v.2.15dev5 * Origin: MTU-Intel ISP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/910473232eb3.html, оценка из 5, голосов 10
|