Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 01.05.2021
Сообщений: 5

Задача поиска подмножеств с минимальной суммой Amazon

01.05.2021, 16:22. Показов 4992. Ответов 41

Студворк — интернет-сервис помощи студентам
Есть список задач - массив чисел. Каждое число представляет собой сложность задачи. Задачи идут в строгом порядке, который нельзя менять. Так же дано количество дней. Сложность дня определяется самой сложной задачей, решенной в этот день. 
Нужно написать функцию, которая разобьет задачи по дням так, чтобы общая сложность (сумма) было минимальная. 


Пример 1:

Задачи [3, 1, 4, 2, 5]
2 дня.

Решение:

первый день [3] -> 3, 

второй день [1, 4, 2, 5] -> 5 (т.к. Сложность дня определяется самой сложной задачей)
3 +5 = 8


Пример 2:

Задачи [2, 4, 7, 3, 5, 1, 6]
3 дня.

Решение:

первый день [2] -> 2,

второй день [4] -> 4
Третий день [73516] -> 7
2+ 4 + 7 = 13


Ищу идеи для решения сложностью меньше O(n^m)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2021, 16:22
Ответы с готовыми решениями:

Задача по массивам. Найти строку с минимальной суммой и поставить ее на место первой строки
Дана матрица размерностью NxM. Найти строку с минимальной суммой и поставить ее на место первой строки. Заранее спасибо!

Найти столбец с минимальной суммой и вывести столбец с минимальной суммой
Найти столбец с минимальной суммой и вывести столбец с минимальной суммой

В заданной матрице поменять строку с минимальной суммой со строкой с максимальной суммой
помогите с кодом

41
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
08.05.2021, 12:28
Студворк — интернет-сервис помощи студентам
vrm2,
Я взял цикл из твоей программы, только вместо переменной end использую k = end - start.
0
1865 / 1054 / 195
Регистрация: 24.02.2013
Сообщений: 3,177
Записей в блоге: 12
12.06.2021, 10:46
Цитата Сообщение от munchkin Посмотреть сообщение
Каждое число представляет собой сложность задачи. Задачи идут в строгом порядке, который нельзя менять.

Как понимать это требование. Ведь оно ни разу не использовалось в приведенных алгоритмах?
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
12.06.2021, 12:07
Цитата Сообщение от Nacuott Посмотреть сообщение
Как понимать это требование. Ведь оно ни разу не использовалось в приведенных алгоритмах?
Так и понимать, что порядок задач в списке менять нельзя. Т.е. список задач представляет именно список, и нам его надо разрезать на n частей.

Если задачи можно менять местами, что решение становится простым - сортируем задачи, затем на каждый день ставим самую легкую задачу, а на последний день - оставшиеся задачи.

Задачи [2, 4, 7, 3, 5, 1, 6]
3 дня.
Ответ [{1}, {2}, {3,4,5,6,7}] => 1 + 2 + 7 = 10
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.06.2021, 14:49
Цитата Сообщение от munchkin Посмотреть сообщение
Ищу идеи для решения сложностью меньше O(n^m)
Откуда такое большое число?

Пусть M - количество задач, N - количество дней.

Тогда количество вариантов разбивок будет равно n = n * ( n + 1) / 2, где n = M - N + 1

Множим на число циклов поиска суммы максимумов - и как-то все равно получается чуточку меньше...

Добавлено через 11 минут
то есть просто максимумов
0
1865 / 1054 / 195
Регистрация: 24.02.2013
Сообщений: 3,177
Записей в блоге: 12
12.06.2021, 15:56
Цитата Сообщение от vrm2 Посмотреть сообщение
Так и понимать, что порядок задач в списке менять нельзя. Т.е. список задач представляет именно список, и нам его надо разрезать на n частей.
Ясно, но из условия задачи это не очевидно.
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
13.06.2021, 14:39
Цитата Сообщение от vantfiles Посмотреть сообщение
Откуда такое большое число?
Если имеем N задач и K дней, то у нас есть (N-1) мест, где мы можем разрезать список, из которых нужно выбрать (K-1).

Количество возможных вариантов по формуле сочетаний равно https://www.cyberforum.ru/cgi-bin/latex.cgi?C^{k-1}_{n-1}, что близко к n^k
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.06.2021, 18:01
Цитата Сообщение от vrm2 Посмотреть сообщение
Количество возможных вариантов
м??
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
14.06.2021, 00:57
Цитата Сообщение от vantfiles Посмотреть сообщение
м??
Что "м??"
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
14.06.2021, 07:27
Цитата Сообщение от vrm2 Посмотреть сообщение
Если имеем N задач и K дней, то у нас есть (N-1) мест
K-1

Добавлено через 3 минуты
Кликните здесь для просмотра всего текста
1 2 3 4 5 6 7 8 9

1 1 7
1 2 6
1 3 5
1 4 4
1 5 3
1 6 2
1 7 1
2 1 6
2 2 5
2 3 4
2 4 3
2 5 2
2 6 1
3 1 5
3 2 4
3 3 3
3 4 2
3 5 1
4 1 4
4 2 3
4 3 2
4 4 1
5 1 3
5 2 2
5 3 1
6 1 2
6 2 1
7 1 1

9 3 -- 28


Это далеко не 9^3
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
14.06.2021, 14:42
Цитата Сообщение от vantfiles Посмотреть сообщение
K-1
Нет, все верно. У нас есть (N-1) мест, где мы можем разрезать список. А не (K-1).

Могли бы Вы отвечать более развернуто? По междометиям и односложным ответам трудно понять мысль, которую хочет донести собеседник.

Цитата Сообщение от vantfiles Посмотреть сообщение
Это далеко не 9^3
В вики https://en.wikipedia.org/wiki/Binomial_coefficient в разделе "Bounds and asymptotic formulas" указаны формулы асимптот. Например, можно рассмотреть случай: 1000 задач, 10 дней.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
14.06.2021, 15:25
Цитата Сообщение от vantfiles Посмотреть сообщение
9 3 -- 28
8!/(6!*2!) = 8*7/2 = 28

Цитата Сообщение от vantfiles Посмотреть сообщение
Пусть M - количество задач, N - количество дней.
Тогда количество вариантов разбивок будет равно n = n * ( n + 1) / 2, где n = M - N + 1
Максимум n достигается при N=1? При N=1 у нас 1 вариант разбиения (все задачи в один день).
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
18.06.2021, 14:19
Цитата Сообщение от Shamil1 Посмотреть сообщение
8!/(6!*2!) = 8*7/2 = 28
Shamil1, да, формулу я вывел неверно. Не могли бы пояснить свою? Как от факториалов произошел переход к таким малым числам?

Добавлено через 35 минут
Цитата Сообщение от vrm2 Посмотреть сообщение
что близко к n^k
1000 задач и 1000 дней -- это один вариант. Откуда n^k ?

Добавлено через 9 минут
Такое ощущение, что здесь имеет место гауссово распределение, но доказать я это не могу

Добавлено через 12 минут
а, формула n! / ( k! * ( n - k )! )

ну очевидно же, что это далеко не n^k

ну да, нормальное распределение... Первый раз такое вижу для сложности алгоритма...

Добавлено через 8 минут
нет, тоже не сходится...

Добавлено через 56 секунд
Коллеги, кто-нибудь может показать правильную формулу для количества вариантов разбиений?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
18.06.2021, 16:50
Цитата Сообщение от vantfiles Посмотреть сообщение
Не могли бы пояснить свою?
Количество способов выбрать (K-1) "мест между задачами" из (N-1) "мест между задачами":
Цитата Сообщение от vrm2 Посмотреть сообщение
Если имеем N задач и K дней, то у нас есть (N-1) мест, где мы можем разрезать список, из которых нужно выбрать (K-1).
Цитата Сообщение от vantfiles Посмотреть сообщение
ну очевидно же, что это далеко не n^k
Максимальное значение при k = n/2 при больших n примерно равно:
2n/sqrt(n*PI/2)
Это не nk, но всё равно много.
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
18.06.2021, 17:07
Цитата Сообщение от vantfiles Посмотреть сообщение
а, формула n! / ( k! * ( n - k )! )
Эту формулу я и приводил Вам ранее - это формула количества сочетаний C(n;k).

Цитата Сообщение от vantfiles Посмотреть сообщение
ну очевидно же, что это далеко не n^k
Также давал ссылку на формулы асимптот для этой функции C(n;k)
n^k - одни из вариантов асимптоты, точнее n^k / k!

Например для больших n и маленьких k реальное значение будет много ближе к n^k, чем к n^2, предложенное Вами.
Для того, чтобы Вы могли убедиться в этом, я и предложил рассмотреть случай n=1000 и k=10
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
18.06.2021, 17:15
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если имеем N задач и K дней, то у нас есть (N-1) мест, где мы можем разрезать список, из которых нужно выбрать (K-1).
А вот это ничего не меняет:

Цитата Сообщение от munchkin Посмотреть сообщение
Задачи идут в строгом порядке, который нельзя менять.
?

Добавлено через 2 минуты
Цитата Сообщение от vrm2 Посмотреть сообщение
это формула количества сочетаний C(n;k).
С учетом запрета на изменение порядка задач эта формула остается?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
18.06.2021, 17:25
Цитата Сообщение от vantfiles Посмотреть сообщение
А вот это ничего не меняет:
Это учитвается. N задач - поэтому N-1 "мест между задачами". И в любом из них мы можем закончить очередной день.

Цитата Сообщение от vrm2 Посмотреть сообщение
Например для больших n и маленьких k реальное значение будет много ближе к n^k,
Для маленьких k неинтересно. Например, для k=2 имеем nk = n2
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
18.06.2021, 17:44
Цитата Сообщение от Shamil1 Посмотреть сообщение
И в любом из них мы можем закончить очередной день.
10 задач, 3 дня. В первый день выполняем 9 задач. Дальше как разбиваем?

Добавлено через 11 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Например, для k=2 имеем nk = n2
4 задачи, 3 дня. Разбивки:

112
121
211

Что с формулой не так?
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
18.06.2021, 18:41
Цитата Сообщение от vantfiles Посмотреть сообщение
4 задачи, 3 дня. Разбивки:
112
121
211
Что с формулой не так?
С формулой все так. Количество равно 3! / (2! * (3-2)!) = 6 / (2*1) = 3

P.S. Нужно читать не только ответ Shamil1, но и контекст, в котором ответ дан
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
18.06.2021, 20:55
Цитата Сообщение от vantfiles Посмотреть сообщение
10 задач, 3 дня. В первый день выполняем 9 задач. Дальше как разбиваем?
В первый день выполнить 9 задач не получится.

9!/(7!*2!)
У нас есть 9 ямок, в которые можно положить 2 мячика. Сначала раскладываем мячики по ямкам, а потом считаем, сколько там задач получилось в первый день.

Добавлено через 26 минут
Цитата Сообщение от vantfiles Посмотреть сообщение
Что с формулой не так?
Ваша формула верна для трех дней.
(M-1)!/(M-1-2)!/2! = (M-1)(M-2)/2 = n * ( n + 1) / 2, где n = M - 3 + 1
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
19.06.2021, 14:24
Shamil1, vrm2, не сочтите за занудство, я реально не могу понять ваши выкладки.

Цитата Сообщение от vrm2 Посмотреть сообщение
С формулой все так. Количество равно 3! / (2! * (3-2)!) = 6 / (2*1) = 3
Объясните, пожалуйста, в какую формулу и что именно Вы подставляете.
Откуда при "4 задачи, 3 дня." в формуле появляется двойка?

Цитата Сообщение от Shamil1 Посмотреть сообщение
У нас есть 9 ямок, в которые можно положить 2 мячика.
Хорошая аналогия. Вот только у нас есть 3 ямки и 10 мячиков. И еще нельзя менять порядок их раскладки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2021, 14:24

В двумерном массиве поменять местами строку с максимальной суммой с минимальной суммой
Нам задали написать 2 различные проги для такого задания В двумерном массиве поменять местами строку с максимальной суммой с минимальной...

Столбец матрицы с минимальной суммой элементов поменять со столбцом с максимальной суммой
#include <math.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> using namespace std; main() {...

В целочисленной матрице поменять местами столбец с минимальной суммой со столбцом с максимальной суммой
Дана прямоугольная матрица nxm целых чисел (n,m<10 – ввод с клавиатуры, значения элементов массива в диапазоне – вводятся случайным...

Массив: В произвольно заданной матрице размера 4*6 определить строку с максимальной суммой элементов и столбец с минимальной суммой.
В произвольно заданной матрице размера 4*6 определить строку с максимальной суммой элементов и столбец с минимальной суммой.

Разбиение множества на k подмножеств с одинаковой суммой
Можете привести примеры, где это можно использовать в жизни, пожалуйста. Примера 3-5.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru