На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Проверка кратности суммы
    Здравствуйте, не могу понять, в какую сторону копать.

    Дано.
    ===
    1. Список товара, каждый товар характеризуется ценой за единицу товара и заданным количеством. Цена и к-во известны для каждого типа товара. Список товара конечен.
    Цена и к-во - вещественные числа, ограничены двумя знаками после запятой.

    2. Проверяемая сумма.

    Задача
    ===
    1. Определить, можно ли набрать проверяемую сумму из этого списка товара.
    2. Если нельзя, то подобрать ближайшую возможную, но большую проверяемой.

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

      Цитата vayer @
      Задача рюкзака вроде не подходит.

      Вполне себе подходит. Просто счётной единицей является не наличествующий товар, а его минимальная единица. Т.е. одна позиция в списке - это дохреналион предметов для упаковки.
        Цитата Akina @
        То есть каждый товар может быть взят в любом количестве от нуля до имеющегося? и тоже с "двумя знаками после запятой"?

        Да, от 0 до заданного, с двумя знаками после запятой.

        А какая тогда вариация "рюкзака"?
        Сообщение отредактировано: vayer -
          Обычный рюкзак, без весовых коэффициентов.

          Скажем, если у тебя 1,5 кг гвоздей, то в решении это 150 грузов по 0,01 кг.
          Сообщение отредактировано: Akina -
            Блин, не понимаю, как адаптировать "рюкзак" на мой случай, можете разжевать дуболому?

            Например,
            товар1 цена1=100 к-во1=3
            товар2 цена2=10 к-во2=0.5
            товар3 цена3=25 к-во3=2
            Проверяемая сумма - 230. Ее можно набрать: 100*2 + 25*1 + 10*0,5.
            Если сумма 106, то ее не наберешь.

            Рюкзак ведь только для целых чисел?

            Может, здесь надо как-то искать возможные слагаемые (цены на товар) с коэффициентами (к-во товара)?
              Цитата vayer @
              Если сумма 106, то ее не наберешь.

              Да запросто. Товар 1 в количестве 1,06.

              Цитата vayer @
              Рюкзак ведь только для целых чисел?

              Нет. Для дискретных.

              Добавлено
              Впрочем, если хочется работать с целыми, и у тебя единица учёта равна 0,01, просто умножь количества на 100, цены соответственно раздели. Просчитай. Затем выполни обратное преобразование.

              Добавлено
              Задача - реальная или учебная?
                Цитата Akina @
                Задача - реальная

                конечно, только вот щаз в магазине купил 1.36 буханки и 3.14 сосисок. подумал, 3 сосисок мало будет - не наемся.
                Сообщение отредактировано: _lcf_ -
                  Цитата Akina @
                  Да запросто. Товар 1 в количестве 1,06.

                  Нет, нельзя.

                  Видимо, я не до конца верно сформулировал задачу.

                  Цена идет за единицу (1) товара.

                  Пусть к-во будет всегда целое, к этому я могу преобразовать список, например:
                  товар1 цена1 = 100 к-во1 = 3 шт.
                  товар2 цена2 = 5 к-во2 = 1 шт.
                  товар3 цена3 = 25 к-во3 = 2 шт.

                  Товар не рассыпной, т.е. измеряется штуками, соответственно, к-во товара1 меняется от 1 до 3 с шагом 1.

                  А вот цена может быть с копейками.

                  Задача реальная: проверить сумму предоплаты на кратность стоимости и к-ву имеющегося в заказе товара. Если сумма некратна, то найти минимально возможную, но большую, чем проверяемая сумма, т.е. если сумму 106 руб. нельзя набрать, то ближайшая и большая будет - 125 = 100 * 1 + 25 * 1
                  Сообщение отредактировано: vayer -
                    Цитата vayer @
                    цена может быть с копейками.

                    Т.е. в копейках она - целое. И количество - тоже целое.
                    Вот в этих единицах и работай.
                    И всё-таки
                    Цитата Akina @
                    Задача - реальная или учебная?
                      Задача реальная: проверить сумму предоплаты на кратность стоимости и к-ву имеющегося в заказе товара. Если сумма некратна, то найти минимально возможную, но большую, чем проверяемая сумма, т.е. если сумму 106 руб. нельзя набрать, то ближайшая и большая будет - 125 = 100 * 1 + 25 * 1
                        Жаль... а то Экселевский солвер щёлкает такие задачки как орехи...
                        Ну в общем программируй рюкзак и не парься.
                        Прикреплённый файлПрикреплённый файл__________1.zip (3,92 Кбайт, скачиваний: 130)
                        Сообщение отредактировано: Akina -
                          Цитата Akina @
                          Т.е. в копейках она - целое.

                          Не понял эту фразу, как целое, если с копейками? :blink:
                            Цена- целое число в копейках.
                              Непонятно, как терминологию рюкзака привязать к моей задаче.

                              Что будет весом и ценностью предметов для моей задачи?
                              Что есть максимальная ценность рюкзака для моей задачи? Ее же вроде мне искать не нужно, тогда что с ней делать?
                              Вместимость рюкзака - это куда прицепить?

                              ====

                              Получается у меня есть рюкзак уже известной ценности и вместимости.
                              Надо найти, какими предметами можно заполнить рюкзак до заданной ценности и вместимости?
                              Сообщение отредактировано: vayer -
                                Цитата vayer @
                                Что будет весом и ценностью предметов для моей задачи?

                                Вес - это твоя стоимость единицы товара в копейках.
                                Ценность всех предметов - единичная.
                                Вместимость рюкзака - это имеющаяся сумма.
                                Решать надо с минимальным переполнением. В оптимуме - с нулевым.
                                То есть на самом деле это не рюкзак, а одномерное заполнение с переполнением.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0682 ]   [ 15 queries used ]   [ Generated: 17.05.24, 14:35 GMT ]