Решение задачи о Рюкзаке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

помогите пожалуйста решить задачу о рюкзаке на С (не плюсах) Задача о рюкзаке По данному набору из n предметов стоимостями p1, p2, ..., pn и весами w1, w2, ..., wn найти поднабор (один предмет можно брать один раз) такой, что его стоимость будет максимальна среди всех поднаборов веса не более W. гугл использовал, но нормальных решений не находил, поскольку в основном все на плюсах, в чем я слаб(

Решение задачи: «Решение задачи о Рюкзаке»

textual
Листинг программы
#include<stdio.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
int pack(int,int);
int p[101],w[101],opt[101][1001];
int main()
{
    int N,W,i;
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    scanf("%d%d",&N,&W);
    for(i=1;i<=N;++i)
        scanf("%d%d",&p[i],&w[i]);
    printf("%d",pack(N,W));
    return 0;
}
int pack (int N,int W)
{
    int i,j;        
        for(i=0;i<=W;i++) opt[0][i]=0;
        for(i=1;i<=N;i++)
        {
            for ( j=0;j<=W;j++)
            {
                opt[i][j]=opt[i-1][j];
                if (j>=w[i])
                    opt[i][j]=MAX(opt[i][j],opt[i-1][j-w[i]]+p[i]);
            }
        }
        return opt[N][W];
}

Объяснение кода листинга программы

  1. Включаем файл stdio.h, который содержит стандартные функции ввода-вывода.
  2. Определяем макрос MAX(a,b), который возвращает максимальное значение из a и b.
  3. Декорируем функции pack и main, чтобы компилятор знал, что эти функции существуют и их можно вызывать.
  4. Инициализируем массивы p, w и opt. Массив p содержит N целых чисел, массив w содержит N целых чисел, а массив opt инициализируется так, что каждый его элемент является нулём.
  5. Считываем N и W.
  6. Считываем N целых чисел.
  7. Вызываем функцию pack.
  8. Выводим результат.
  9. Функция pack принимает два аргумента: N и W.
  10. Инициализируем массив opt.
  11. Проходим по всем элементам массива opt.
  12. Если j больше или равно w[i], то обновляем значение opt[i][j] значением opt[i-1][j-w[i]]+p[i].
  13. Возвращаем opt[N][W].
  14. Функция main завершается, и программа заканчивается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы