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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2009, 16:19   #1
matteo
Новичок
Джуниор
 
Регистрация: 23.12.2009
Сообщений: 1
По умолчанию Загрузка оборудования(вариант "Задачи о ранце")

Формулировка:
Дан список деталей(время изготовления, прибыль за деталь), кол-во деталей и ограничение по времени. Нужно вывести максимальную прибыль и кол-во деталей каждого типа для достижения этой максимальной прибыли.
Пример:
инпут файл(2 детали, тайм-лимит 6, у первой детали время 1, прибыль 4, у второй время 4, прибыль 5):
2 5
1 1
4 5
Результат:
кол-во деталий 1го типа 1
кол-во деталей второго типа 1
Макс Прибыль 6

Посчитать макс прибыль у меня получилось, а вод список деталей с количеством каждой - проблема. Мой код:

Код:
#include <string.h>
#include <stdio.h>
#include <errno.h>

int max(int a, int b){
    if (a>b)
        return a;
    return b;
}
int solver(int *time, int *profit, int *quantity, int b, int n){
    int *temp = new int [b+1]; //рабочий массив
    int optimal_profit; // прибыль от выбранной детали
    for (int j=0;j<n;j++)// подготовка подсчета
        quantity[j]=0; // кол-ва деталей каждого типа
    temp[0] = 0;// начало рабочего массива - 0
    for (int k = 1; k <= b; k++)// k приниает заначения от 1 до
    {                           // ограничения по времени
        temp[k] =0;
        for (int i = 0; i < n; i++)// пересичляем все типы деталей
        {
            if (time[i] <= k) // выбираем так, что бы время
                              // не привысило ограничение
            {
                temp[k] = max(temp[k], temp[k - time[i]] + profit[i]);//ищем
                // максимальную прибыль
                optimal_profit=profit[i]; // получаем номер
                // Использованной детали
            }
        }
        for (int j=0;j<n;j++)
            if (optimal_profit == profit[j])
                quantity[j]++;

    }
    return temp[b];
}
int main() {
    int order_quantity; /*количество заказов */
    int time_limit;     /*ресурс времени станка */

    int total_profit=0; /* суммарная прибыль */
    int *time; // массив времени необх для каждой детали
    int *profit; // массив прибыли каждой детали
    int *quantity; // массив кол-ва деталей каждого типа
 /**
     *Открытие файлов с проверкой..
     */
    if(!(freopen("input.txt","r",stdin))) {
        fprintf(stderr, "%s\n", strerror(errno));
        return 1;
    }

      scanf("%d",&order_quantity);
      scanf("%d",&time_limit);
    /*Создаем массив заказов и заполняем его */
     time = new int [order_quantity];
     profit = new int [order_quantity];
     quantity = new int [ order_quantity];
     for (int i=0;i<order_quantity;i++){
        scanf("%d",&time[i]);
        scanf("%d",&profit[i]);
        quantity[i]=0;
    }

     total_profit = solver(time, profit, quantity, time_limit, order_quantity);

     for (int i=0;i<order_quantity;i++)
        printf("\n Order number: %d, Quantity of details: %d",i+1, quantity[i]);

    /* Вывод суммарной прибыли */
    printf("\n Total profit: %d\n", total_profit);

    /* oчистка памяти */
    delete time;
    delete profit;
    return 0;
}
при вводе инпут файла из примера( 2 5 1 1 4 5)
Выдает:

Order number: 1, Quantity of details: 3
Order number: 2, Quantity of details: 2
Total profit: 6

Помогите ошибку найти и исправить, если можно..
matteo вне форума Ответить с цитированием
Старый 11.03.2011, 11:49   #2
07zaharov
Новичок
Джуниор
 
Регистрация: 11.03.2011
Сообщений: 1
По умолчанию выложите шаблон

Уважаемый коллега,
Выложите шаблон в Excel, чтоб посмотреть и найти решение)
07zaharov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Паскаль. 2 задачи (Программа "Верификация","КАК БРИГАДИРУ РАЗДЕЛИТЬ ЗАРОБОТАННЫЕ ДЕНЬГИ") Valik102 Помощь студентам 3 20.05.2009 20:42
две задачи(программа"верификация" , "как бригадиру разделить зароботаные деньги) Valik102 Паскаль, Turbo Pascal, PascalABC.NET 0 13.05.2009 23:32
две задачи(программа"верификация" , "как бригадиру разделить зароботаные деньги) Valik102 Паскаль, Turbo Pascal, PascalABC.NET 0 13.05.2009 18:13