Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

задача о рюкзаке.(промежуточные результаты)

32K
01 августа 2010 года
paska
26 / / 06.02.2009
Здравствуйте. Подскажите как реализовать вывод промежуточных результатов в след программе. необходимо выводить набранный вес и взятые товары, например:

вес: 20 товары: 1 2 2 1 1

и т.д.

в заранее огромное спасибо!

вот код:
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <limits>

using namespace std;
#define MAXN 100

int _tmain(int argc, _TCHAR* argv[])
{
    int val[MAXN][MAXN];
    bool take[MAXN][MAXN];
    int cost[MAXN], w[MAXN];
    int n,TotalW,weight,i,j = 0,nn;
    int milestones[MAXN]; //массив для промежуточных результатов

    ifstream inp("data.txt");
    if(inp.fail())
    {
        cout <<"error! file not found!"<< endl;
        cout <<"Press any key to exit..."<< endl;
        _getch();
        return 0;
    }
    inp >> n;  inp >> TotalW;
    for(i = 1; i <= n; i++)
    {
        inp >> w; inp >> cost;
    }
    //начальная инициализация для веса 0
    for(i = 0; i <= n; i++)
    {
        val[0] = 0;
        take[0] = false;
    }
    for(weight = 1; weight <= TotalW; weight++) val[weight][0] = 0;
//предполагаю что выводить нужно где то в этом цикле
    for(weight = 1; weight <= TotalW; weight++)
    {
        //cout <<"Weight: "<<weight<<" taken things: ";
        for(i = 1; i <= n; i++)
            if(w > weight || val[weight][i-1] >= val[weight - w][i-1] + cost)
            {
                val[weight] = val[weight][i-1];
                take[weight] = false;//отмечаем что вещь i не взяли
            }
            else
            {
                val[weight] = val[weight - w] + cost;
                take[weight] = true; //отмечаем что вещь i  была взята
            }
             cout <<endl;
        //  _getch();
    }
//выводим результаты
            cout <<" Best value: " << val[TotalW][n] <<endl;
            cout <<"Taken things: ";
            weight = TotalW;
            for(i = n; i >= 1; i--)
                if( take[weight])
                {
                    cout << i <<" ";
                    weight = weight - w;
                }
    _getch();
    return 0;
}
392
06 августа 2010 года
cronya
421 / / 03.01.2009
структуру не судьба использовать
Код:
struct имя
{
переменные;
};
int main()
{
указатель_структуры переменная;
//память выделил
cout<<указатель_структуры[индекс_в_памяти].переменная;//massive[idx] типа
//память освободил
}

если нужно добавить уже в массив тут лучше списки юзать
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог