Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2018, 23:07   #1
Suslik13
Новичок
Джуниор
 
Регистрация: 14.04.2018
Сообщений: 1
По умолчанию Задача: Создание архива

Имя входного файла: input.txt или стандартный ввод

Имя выходного файла: output.txt или стандартный вывод

Ограничение по времени: 1 секунда

Системный администратор вспомнил, что давно не делал архива пользовательских файлов. Однако, объем диска, куда он может поместить архив, может быть меньше, чем суммарный объем архивируемых файлов.

Известно, какой объем занимают файлы каждого пользователя.

Напишите программу, которая по заданной информации о пользователях и свободному объему на архивном диске определит максимальное число пользователей, чьи данные можно поместить в архив, при этом используя свободное место как можно более полно.


ПРИМЕР

ввод:

100 3
Archie 50
Barnett 30
Calvin 50


вывод:

2
Calvin
Archie

Помогите подправить код пожалуйста, не подходит по времени
Код:
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int main()
{
    ifstream fin("input.txt");
    vector<string> Ans;
    int N, K;
    fin >> K >> N;
    vector<pair<int, string> > A(N);
    for (auto &x : A)
        fin >> x.second >> x.first;
    vector<int> F(K + 1);
    vector<pair<int, string> > Prev(K + 1);
    F[0] = 1;
    for (auto &x : A)
    {
        for (int k = K; k > x.first - 1; --k)
            if (F[k - x.first] == 1 && F[k] != 1)
            {
                F[k] = 1;
                Prev[k].second = x.second;
                Prev[k].first = x.first;
            }
    }
    int i = K;
    while (F[i] == 0)
        --i;
    while (i > 0)
    {
        Ans.push_back(Prev[i].second);
        i -= Prev[i].first;
    }
    cout << Ans.size() << endl;
    for (auto &x : Ans)
        cout << x << endl;
    return 0;
}
Suslik13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
генерирование архива CodeNOT PHP 1 10.06.2013 18:45
Создание архива ms dos Эйфория=* Помощь студентам 1 11.12.2012 23:20
Создание архива rar через делфи ramzes777 Общие вопросы Delphi 8 12.05.2012 21:05
создание многотомного архива sashonk Общие вопросы по Java, Java SE, Kotlin 0 06.10.2010 14:40
Создание архива Aндрей Помощь студентам 1 28.02.2009 02:35