#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;
}
задача о рюкзаке.(промежуточные результаты)
Здравствуйте. Подскажите как реализовать вывод промежуточных результатов в след программе. необходимо выводить набранный вес и взятые товары, например:
Код:
struct имя
{
переменные;
};
int main()
{
указатель_структуры переменная;
//память выделил
cout<<указатель_структуры[индекс_в_памяти].переменная;//massive[idx] типа
//память освободил
}
{
переменные;
};
int main()
{
указатель_структуры переменная;
//память выделил
cout<<указатель_структуры[индекс_в_памяти].переменная;//massive[idx] типа
//память освободил
}
если нужно добавить уже в массив тут лучше списки юзать