Помощь в разборе кода с++
Всем добрый вечер. У меня возникла большая проблема, в вузе 2 года назад сдавали с++ и был код, мы его ответили, но сейчас оказалось, что у меня опять долг. У меня есть программа которую мне нужно объяснить, чуть ли не построчно. Помогите пожалуйста разобраться в некоторых элементах кода. Можно просто текстом, можно и комментариями, как у меня про typedef pair. Просто понять, что делают эти слова в данный программе(ofstream fout, vector, auto, w_c, fin). Задача о рюкзаке это. Если у кого-то есть более понятный и простой код на эту задачу, так было бы легче думаю.
#include <iostream>
#include <limits>
#include <utility>
#include <vector>
#include<fstream>
using namespace std;
typedef pair < int, int > T_weight_and_cost; // объединение двух элементов, к первому first, ко второму second
typedef vector < T_weight_and_cost > T_weights_and_costs;
ofstream fout;
void print_most_costly_contents_of_knapsack
(
int w_capacity,
T_weights_and_costs weights_and_costs
)
{
setlocale(LC_ALL, "Russian");
int total_cost_max{};
T_weights_and_costs best_weights_and_costs;
do
{
int total_weight{};
int total_cost{};
size_t i{};
for (; i < weights_and_costs.size(); ++i)
{
auto & w_c = weights_and_costs[i];
total_weight += w_c.first;
total_cost += w_c.second;
if (
total_weight
> w_capacity
)
{
total_cost -= w_c.second;
break;
}
}
if (
total_cost
> total_cost_max
)
{
total_cost_max = total_cost;
best_weights_and_costs.assign
(
weights_and_costs.begin(),
weights_and_costs.begin() + i
);
}
} while (
next_permutation
(
weights_and_costs.begin(),
weights_and_costs.end()
)
);
cout << endl;
if (
best_weights_and_costs.empty()
)
{
std::cout << "Нет подходящих сочетаний"
<< std::endl;
}
else
{
for (auto best_w_c : best_weights_and_costs)
{
cout << best_w_c.first
<< '\t'
<< best_w_c.second
<< endl;
}
}
cout << "end"
<< std::endl;
}
int main()
{
ifstream fin("vvod.txt");
int w_capacity{};
fin >> w_capacity;
int n{};
fin >> n;
T_weights_and_costs weights_and_costs(n);
for (int i = 0; i < n; ++i)
{
fin >> weights_and_costs[i].first;
fin >> weights_and_costs[i].second;
}
std::sort
(
weights_and_costs.begin(),
weights_and_costs.end()
);
print_most_costly_contents_of_knapsack
(
w_capacity,
weights_and_costs
);
system("pause");
}