Форум программистов, компьютерный форум CyberForum.ru

исправьте ошибки в программе о рюкзаке - C++

Восстановить пароль Регистрация
 
LowRayder
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 12
27.12.2012, 19:18     исправьте ошибки в программе о рюкзаке #1
не знаю в чём ошибка. после компиляции выдают не те результаты в конце

сам код

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
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iomanip>
using namespace std;
#define max_w 15
#define obj 6
int main()
{
int a[max_w+1][obj],p[6],w[6],temp=0,k=0,x[obj];
p[0]=3;p[1]=6;p[2]=7;p[3]=9;p[4]=11;p[5]=18;
w[0]=1;w[1]=2;w[2]=3;w[3]=5;w[4]=6;w[5]=8;
for(int j=0;j<obj;j++)
{
for(int i=0;i<max_w+1;i++)
{
if(i<w[j])
{
    if(i==0 || (j-1)<0)a[i][j]=0;
    else a[i][j]=a[i][j-1];
}
if(i>=w[j])
{
    if((j-1)<0)a[i][j]=p[j];
 else
{
    if(a[i][j-1]>(a[k][j-32]+p[j]))a[i][j]=a[i][j-1];
    else a[i][j]=a[k][j-1]+p[j];
                k++;
 }
     }
 }
     k=0;
 }
     for(int i=0;i<max_w+1;i++)
     {
for(int j=0;j<obj;j++)
{
cout<<setw(4)<<a[i][j]<<" ";
}
cout<<endl;
}
k=max_w;
cout<<"\nThe Answer is = ";
for(int i=obj-1;i>=0;i--)
{
if(a[k][i]!=a[k][i-1])
{
 x[i]=1;k=k-w[i];
}
        else if(i==0 && a[k][i]!=0)x[i]=1;
    else
        x[i]=0;
     }
 for(int i=0;i<obj;i++)cout<<x[i]<<" ";
 cout<<"\n\nThe maximum value is = "<<a[max_w][obj-1];
     _getch();
 }
Прямой ход на (С ++)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(int j=0;j<obj;j++){
for(int i=0;i<max_w+1;i++){
if(i<w[j]){
if(i==0 || (j-1)<0)a[i][j]=0;
else a[i][j]=a[i][j-1];
}
if(i>=w[j]){
if((j-1)<0)a[i][j]=p[j];
else{
if(a[i][j-1]>(a[k][j-1]+p[j]))a[i][j]=a[i][j-1];
else a[i][j]=a[k][j-1]+p[j];
k++;
}
}
}
k=0;
}
Обратный ход на (С++)

C++
1
2
3
4
5
6
7
8
9
10
for(int i=obj-1;i>=0;i--)
{
if(a[k][i]!=a[k][i-1])
{
    x[i]=1;k=k-w[i];
}
else if(i==0 && a[k][i]!=0)x[i]=1;
else
x[i]=0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 19:18     исправьте ошибки в программе о рюкзаке
Посмотрите здесь:

Исправьте ошибки что найдете в моей программе. C++
Массивы(исправьте ошибки) C++
C++ Исправьте мне ошибки!
C++ исправьте ошибки в коде
исправьте ошибки в коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Learx
1032 / 839 / 85
Регистрация: 31.03.2010
Сообщений: 2,465
27.12.2012, 19:22     исправьте ошибки в программе о рюкзаке #2
Никто разбирать простыню кода не будет. Более того это не форум экстрасенсов чтоб угадать условие задачи.

Как исправить:
1. Разбить задачу на подзадачи и проверить выполнение подзадач и потом их только объединять в одну.
2. Пользуйтесь отладчиком или выводите промежуточные результаты чтоб проверить выполнение каждого шага.
LowRayder
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 12
27.12.2012, 20:05  [ТС]     исправьте ошибки в программе о рюкзаке #3
Это задача о рюкзаке. есть контейнер в который нужно поместить предметы с определённым весом и ценой. чтобы набор из этих предметов был с максимальной ценой
Learx
1032 / 839 / 85
Регистрация: 31.03.2010
Сообщений: 2,465
28.12.2012, 17:12     исправьте ошибки в программе о рюкзаке #4
Честно говоря не могу понять что делает ваша программа. Я даже не могу понять какой максимальный вес.
Что необходимо сделать.
1. Двухмерный массив для вариантов наполнения. Проинициализировать -1.
Кол-во вариантов для n предметов будет n!(количество перестановок)
2. Полным перебором заполняем варианты(то есть сохраняем индексы добавленных предметов). Тут необходимо добавить проверку переполнения и прерывать заполнение варианта если следуююший предмет переполнит(продолжать не надо. Если и есть предмет который еще может быть добавлен, то это покажет другой вариант). Тут же можно сразу считать и стоимость для всех вариантов(сохраняя её в другой массив).
3. Из всех вариантов выбираем тот, который имеет максимальную стоимость.
Yandex
Объявления
28.12.2012, 17:12     исправьте ошибки в программе о рюкзаке
Ответ Создать тему
Опции темы

Текущее время: 16:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru