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

Задача: Рюкзак

22.09.2020, 14:14. Показов 4247. Ответов 10

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста. Нужно написать код для данной задачи!
Задача: Рюкзак
Имя входного файла: input.txt
Имя выходного файла: output.txt
Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

Имеется ранец с максимальной грузоподъёмностью W и набор из n предметов. i–й предмет имеет стоимость ci и вес wi. Какие предметы можно положить в ранец, чтобы он не порвался, а суммарная стоимость выбранных предметов была бы максимальной?

Формат входного файла
В первой строке входного файла содержатся два числа W, n (1 ≤ W ≤ 10000,1 ≤ n ≤ 100),где W — вместимость рюкзака, а n — количество видов вещей. Затем идут n строк, в каждой по 2 целых положительных числа: вес и стоимость соответствующей вещи (каждое из чисел до 30000).

Формат выходного файла
Выходной файл должен содержать одно число — максимально возможный доход. Учтите, что вещи нельзя делить на части.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2020, 14:14
Ответы с готовыми решениями:

Задача про рюкзак
Всем привет! Есть программа, которая решает задачу про рюкзак. Когда у меня количество "предметов" 5 или 10, то все работает...

Задача про рюкзак
Из заданных N предметов выбрать такие, чтобы суммарный вес был менее 30 кг, а стоимость - наибольшей. Напечатать суммарную стоимость. ...

Задача о камнях (почти рюкзак) модификация)
из камней весом p1, p2 ... pn набрать вес W если это возможно вывести yes, если не - no, но есть проблемка: в дополнение к задаче дается...

10
Just Do It!
 Аватар для XLAT
4140 / 2542 / 645
Регистрация: 23.09.2014
Сообщений: 8,219
Записей в блоге: 2
22.09.2020, 14:36 2
WidDing,
Найдите максимальный вес золота, который можно унести в рюкзаке вместительностью S
смотрите моё решение, там на входе два массива:
первый массив - вес,
второй - стоимость.
0
0 / 0 / 0
Регистрация: 08.12.2019
Сообщений: 15
23.09.2020, 17:11  [ТС] 3
Извините, не понял как ваше решение подстроить под эту задачу, если не сложно, могли бы вы написать уже готовый код ?

Добавлено через 1 час 33 минуты
Извините, не понял как ваше решение подстроить под эту задачу, если не сложно, могли бы вы написать уже готовый код ?
0
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,175
23.09.2020, 17:51 4
Цитата Сообщение от WidDing Посмотреть сообщение
могли бы вы написать уже готовый код ?
0
0 / 0 / 0
Регистрация: 08.12.2019
Сообщений: 15
26.09.2020, 16:28  [ТС] 5
Здравствуйте, нужна помощь в задаче. Вот её условие

Имя входного файла: input.txt
Имя выходного файла: output.txt
Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

Имеется ранец с максимальной грузоподъёмностью W и набор из n предметов. i–й предмет имеет стоимость ci и вес wi. Какие предметы можно положить в ранец, чтобы он не порвался, а суммарная стоимость выбранных предметов была бы максимальной?

Формат входного файла
В первой строке входного файла содержатся два числа W, n (1 ≤ W ≤ 10000,1 ≤ n ≤ 100),где W — вместимость рюкзака, а n — количество видов вещей. Затем идут n строк, в каждой по 2 целых положительных числа: вес и стоимость соответствующей вещи (каждое из чисел до 30000).

Формат выходного файла
Выходной файл должен содержать одно число — максимально возможный доход. Учтите, что вещи нельзя делить на части.

Есть код, но ответ выдаёт неверный. Подскажите, пожалуйста, как исправить или, по возможности, предоставьте альтернативное решение данной задачи
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <fstream>
 
using namespace std;
 
ifstream in("input.txt");
ofstream out("output.txt");
 
int  wts[100], cost[100];
int *x = new int[100000];
int SumC = 0, SumW = 0, Best = 0;
int N, W;
int val = 1, ak;
 
void print()
{ 
    int i;
 
    for( i = 1; i <= val; i++ )
    {
        SumW = SumW + wts[x[i]];
        SumC = SumC + cost[x[i]];
}
        if( SumW <= W && SumC > Best ) Best = SumC;
    }
    SumC = 0;
    SumW = 0;
}
 
void Generate( int n, int k )
{
    int i, j, p;
    for ( i = 1; i <= k; i++ ) x[i] = i;
    print();
    do 
    {
        p=0;
        for( i = k; i >= 1; i-- )
        if ( x[i] < n - k + i ) { p = i; break; }
        if ( p > 0 )
        {
            x[p]++;
            for( i = p + 1; i <= k; i++ ) x[i] = x[i-1] + 1;
            print();
        }
      }
      while( p > 0 );
}
 
int main()
{
    int i = 1;
 
    in >> N;
    in >> W;
    
    while( !in.eof() )
    {
        in >> wts[i];
        in >> cost[i];
        i++;
    }
 
    while( val <= N )
    {
        Generate( N, val );
        val++;
    }
 
    out << Best << endl; 
}
0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
29.09.2020, 15:45 6
Есть код, но ответ выдаёт неверный.
В смысле - не компилируется из-за неправильно расставленных скобок?
0
Just Do It!
 Аватар для XLAT
4140 / 2542 / 645
Регистрация: 23.09.2014
Сообщений: 8,219
Записей в блоге: 2
29.09.2020, 16:22 7
Цитата Сообщение от WidDing Посмотреть сообщение
если не сложно, могли бы вы написать уже готовый код ?
легко,
но если вам не сложно, то дайте ссылку на ваш валидатор.
0
0 / 0 / 0
Регистрация: 08.12.2019
Сообщений: 15
29.09.2020, 18:52  [ТС] 8
Vladimir., компилируется, но выдает неверный ответ на первом тесте

Добавлено через 17 минут
XLAT, к сожалению валидатор даётся только для студенческих учётных записей
0
Just Do It!
 Аватар для XLAT
4140 / 2542 / 645
Регистрация: 23.09.2014
Сообщений: 8,219
Записей в блоге: 2
29.09.2020, 19:06 9
Цитата Сообщение от WidDing Посмотреть сообщение
к сожалению валидатор даётся только для студенческих учётных записей
ладно, вот рискните:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
///----------------------------------------------------------------------------|
/// Рюкзак.
///
/// Найдите максимальный вес золота, который можно унести в рюкзаке
/// вместительностью S, если есть N золотых слитков с заданными весами.
///
/// Входные данные:
///     ... засекречено.
///----------------------------------------------------------------------------:
#include <iostream>
#include <fstream>
#include <vector>
#include <limits>
 
using namespace std;
 
template<class T>
T maxx(T a, T b)
{   if(a > b) return a;
              return b;
}
 
unsigned foo(const std::vector<unsigned>& wts, 
             const std::vector<unsigned>& cost, unsigned W)
{   size_t n = wts.size();
    std::vector<std::vector<unsigned> > dp(W + 1);
    for (unsigned i = 0; i <= W; i++)
    {   dp[i].resize(n + 1);
        dp[i][0] = 0;
    }
    for (size_t i = 0; i <= n; i++)
    {   dp[0][i] = 0;
    }
    for     (size_t j = 1; j <= n; j++)
    {   for (size_t w = 1; w <= W; w++)
        {   if (wts[j-1] <= w)
            {   dp[w][j] = maxx<unsigned>
                    (dp[w][j - 1], dp[w - wts[j-1]][j - 1] + cost[j-1]);
            }
            else
            {   dp[w][j] = dp[w][j - 1];
            }
        }
    }
    return dp[W][n];
}
 
int main()
{   unsigned S;
    std::vector<unsigned> w;
    std::vector<unsigned> c;
    
    ifstream ifs("input.txt");
    ofstream ofs("output.txt");
    
    ifs >> S;
    ifs >> S;
    
    unsigned u;
    while (ifs >> u)
    {   w.push_back(u);
        ifs >> u;
        c.push_back(u);
    }
    ofs << foo(w, c, S);
}
0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
29.09.2020, 19:55 10
Цитата Сообщение от WidDing Посмотреть сообщение
компилируется, но выдает неверный ответ на первом тесте
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void print()
{ //функция начало
    int i;
 
    for( i = 1; i <= val; i++ )
    { //цикл начало
        SumW = SumW + wts[x[i]];
        SumC = SumC + cost[x[i]];
}//цикл конец
        if( SumW <= W && SumC > Best ) Best = SumC;
    }//функция конец
    SumC = 0; // скоуп фаила
    SumW = 0;
} // какая-то непонятная фигурная скобка. Компилятор должен ругаться.
0
0 / 0 / 0
Регистрация: 08.12.2019
Сообщений: 15
29.09.2020, 22:06  [ТС] 11
XLAT, неверный ответ на 1 тесте.

Первый тест.
Входные данные:
19 4
5 7
4 6
10 3
9 5
Правильный ответ:
18
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.09.2020, 22:06
Помогаю со студенческими работами здесь

Задача про рюкзак - ускорить работу программы
Вообщем есть алгоритм, который работает правильно за O(N*W), поэтому при больших значениях будет очень долго считать, нужно изменить так,...

непрерывный рюкзак
Первая строка содержит количество предметов 1≤n≤10^3 и вместимость рюкзака 0≤W≤2⋅10^6. Каждая из следующих n строк задаёт стоимость...

Сверхвозрастающий рюкзак
Всем привет. Помогите написать программу. Я разобрался в теории, а реализовать не могу. Пусть у нас есть множество предметов...

Эвристика. Рюкзак Алладина.
Помогите с заданием пожалуйста. Разработать алгоритм и написать программу для задания Алладина: сколько ценных вещей (заданных массе и...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Контейнеризация ML моделей с помощью Docker и Kubernetes
Mr. Docker 14.03.2025
Перенос ML-моделей из лаборатории в продакшн сопровождается целым комплексом проблем. Нередко код, который отлично работает на локальной машине, отказывается функционировать в промышленной среде. . . .
Организация масштабируемого хранилища с Apache Cassandra
Codd 14.03.2025
Изначально разработанная в Facebook, а затем переданная Apache Software Foundation, Cassandra сочетает в себе принципы Amazon's Dynamo и Google's BigTable. Эта комбинация создает уникальную. . .
Kafka или Pulsar: Что лучше для потоковой обработки в Java
Javaican 14.03.2025
Среди множества решений для потоковой обработки данных Apache Kafka долгое время удерживала лидирующие позиции, став де-факто стандартом в индустрии. Однако в последние годы всё больше внимания. . .
Создание и использование компонентов в Vue 3
Reangularity 14.03.2025
Компонент в Vue - это автономный блок интерфейса, который содержит собственную разметку, логику и стили. Представьте себе кнопку, форму ввода или даже целую панель навигации - всё это можно оформить. . .
Vue 3: Создаем современное веб-приложение с Composition API
Reangularity 14.03.2025
В фронтенд-разработке Vue 3 выделяется своим прагматичным подходом. В отличие от React с его минималистичной философией "всё — JavaScript" или Angular с его всеобъемлющим корпоративным подходом, Vue. . .
Разработка контекстных меню в iOS
mobDevWorks 14.03.2025
С приходом iOS 13 Apple представила новый API для контекстных меню, который полностью заменил предыдущую технологию 3D Touch peek & pop. Хотя многие разработчики и пользователи испытывают ностальгию. . .
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер