Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 10
1

Купить больше половины карандашей, но при этом потратив минимум денег

07.03.2021, 17:52. Показов 1463. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Условно говоря есть упаковки карандашей, в i-ой упаковке a(i) карандашей, стоимость упаковки b(i), то есть есть список [[a1,b1],[a2,b2],[a3,b3],[a4,b4]...]. Нужно купить больше половины карандашей, но при этом потратив минимум денег. Пока решение в голову не приходит. Кто-то может подсказать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2021, 17:52
Ответы с готовыми решениями:

Найти минимум среди элементов первой половины массива и максимум среди второй половины
Ввести одномерный массив А , вывести его. Найти минимум среди элементов первой половины массива и...

Найти минимум среди элементов первой половины массива и максимум среди второй половины
Ввести одномерный массив A, вывести его. Найти минимум среди элементов первой половины массива и...

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

Найти максимум среди элементов первой половины массива и минимум среди второй половины массива, которые поменять местами
Люди... Как составить прогу для PascalABC? Не могу разбить массив на две половины... Ввести...

13
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
07.03.2021, 21:49 2
Сортировка по ai / bi ?
0
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 10
07.03.2021, 23:06  [ТС] 3
Цитата Сообщение от Новичок Посмотреть сообщение
Сортировка по ai / bi ?
.
Если я правильно понял о чем вы, то для теста [[10,7],[20,20],[31,26]] прога даст ответ 27 за 30 карандашей, хотя выгоднее купить 31 карандаш за 26
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
08.03.2021, 02:28 4
Да, действительно, только там даже более неоптимальный ответ выйдет. А какие ограничения на кол-во упаковок ? Есть простое решение с перебором, но это очень неэффективно.
0
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 10
08.03.2021, 10:51  [ТС] 5
Цитата Сообщение от Новичок Посмотреть сообщение
А какие ограничения на кол-во упаковок ?
в сумме упаковок не больше 2017
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
08.03.2021, 11:15 6
Лучший ответ Сообщение было отмечено Arman132 как решение

Решение

Arman132, это задача о рюкзаке почти в чистом виде.
1
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 10
08.03.2021, 11:19  [ТС] 7
avgoor, спасибо
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
08.03.2021, 11:28 8
Arman132, я бы предложил сортировать по стоимости за штуку. Для того чтобы с плавающей точкой не связываться (а может и зря, учитывая современные матпроцессороы) настрогал компоратор)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>
using namespace std;
 
struct rate_ineger_comparator
{
    bool operator()(const pair<int,int> &left, const pair<int,int> &right)
    {
        //можете убрать локальные переменные, которые умный компиллер и сам уберёт
        //для порядку)
        int rate_left=left.second/left.first;
        int rate_right=right.second/right.first ;
        if(rate_left<rate_right) return true;
        if(rate_left>rate_right) return false;
        //равны
        int rem_left=left.second%left.first ;
        int rem_right=right.second%right.first ;
        if (rem_left<rem_right) return true;
        return false;
    }
};
 
int main()
{
    vector<pair<int,int>> pens
    {
    {20,20}
    ,{10,7}
    ,{31,26}
    };
sort(pens.begin(), pens.end(), rate_ineger_comparator{});
for(auto el:pens)cout<<el.first<<' '<<el.second<<endl;
 
return 0;
}
Однако алгоритм набора стоимости чуть кучеряв и если праздник позволит, я ещё появлюсь. Но надеюсь вы сами его найдёте.
Желаю милым дамам хороших поздравителей с букетами, а хорошим поздравителям букеты милых дам.
1
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
08.03.2021, 12:20 9
Цитата Сообщение от IGPIGP Посмотреть сообщение
Однако алгоритм набора стоимости чуть кучеряв и если праздник позволит, я ещё появлюсь.
С мегабакса от института Клея проставитесь?
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
08.03.2021, 12:21 10
Цитата Сообщение от avgoor Посмотреть сообщение
С мегабакса от института Клея проставитесь?
Расскажите подробнее. Если берёте на себя организацию - ваша половина.
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
08.03.2021, 12:33 11
Цитата Сообщение от IGPIGP Посмотреть сообщение
Расскажите подробнее.
Если вы сможете решить задачу ТС-а за полиномиальное время, то...
Задача эквивалентна следующей:
Владелец лавки собирает самые ценные наборы в свой рюкзак (вместимостью N/2-1, где N - общее число карандашей) и убегает в закат. Тем самым вы докажете равенство P и NP классов, что является задачей тысячелетия.

Добавлено через 1 минуту
Цитата Сообщение от IGPIGP Посмотреть сообщение
ваша половина.
Заметано
1
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
08.03.2021, 12:35 12
Цитата Сообщение от avgoor Посмотреть сообщение
Заметано
Возможно мне решение просто кажется несложным. Но... Миллион это не так уж и много, чтобы пожертвовать таким праздником. Посмотрим к вечеру и/или завтра.
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
08.03.2021, 12:44 13
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но... Миллион это не так уж и много, чтобы пожертвовать таким праздником. Посмотрим к вечеру и/или завтра.
Мы с женой уже употребляем.
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
08.03.2021, 13:12 14
Цитата Сообщение от avgoor Посмотреть сообщение
Мы с женой уже употребляем.
Поутру - классика жанра
Солнце нынче встало,
Осветить бокалы.
0
08.03.2021, 13:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2021, 13:12
Помогаю со студенческими работами здесь

Определить, что больше: максимальный элемент левой половины или минимальный элемент правой половины матрицы
Определить что больше максимальный элемент левой половины или минимальный элемент правой половины...

Определить, является ли сумма первой половины цифр числа больше суммы второй половины цифр
Есть число N ,которое вводится. Нужно определить, является ли сумма первой половины цифр больше...

При запуске игры частота падает почти на минимум и держится на этом уровне
При запуске CSGO частота процессора в игре падает почти на минимум : 0.40 - 0.75 ггц. Когда же...

Найти закон распределения числа черных карандашей из наугад извлекаемых 3х карандашей.
В коробке 5 красный и 2 черных карандаша. ДСВ Х - число черных карандашей из наугад извлекаемых 3х...

Произвести циклический сдвиг элементов массива вправо, при этом не затрагивая максимум и минимум
Ввести одномерный массив А вывести его. Произвести циклический сдвиг его элементов вправо при этом...

Как произвести циклический сдвиг элементов массивов вправо, при этом не затрагивать максимум и минимум?
Подскажите, как произвести циклический сдвиг элементов массивов вправо, при этом не затрагивать...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru