Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

#include <iostream>

#include <iomanip>

#include <fstream>

using namespace std;

struct Tara {

string nume;

int costSejur;

int nota;

};

int maxim(int a, int b) {

return (a > b) ? a : b;

void afisareTabel(const Tara* tari, int numTari) {

cout << "-----------------------------------------------" << endl;

cout << "| Tara | Cost Sejur (Euro) | Nota |" << endl;

cout << "-----------------------------------------------" << endl;

for (int i = 0; i < numTari; i++) {

cout << "|" << setw(15) << left << tari[i].nume;

cout << "|" << setw(18) << left << tari[i].costSejur;

cout << "|" << setw(5) << left << tari[i].nota;

cout << "|" << endl;

cout << "-----------------------------------------------" << endl;

}
int calculMaxNota(const Tara* tari, int buget, int numTari) {

int** dp = new int*[numTari + 1];

for (int i = 0; i <= numTari; ++i) {

dp[i] = new int[buget + 1];

for (int i = 0; i <= numTari; ++i) {

for (int j = 0; j <= buget; ++j) {

if (i == 0 || j == 0) {

dp[i][j] = 0;

} else if (tari[i - 1].costSejur <= j) {

dp[i][j] = maxim(dp[i - 1][j], tari[i - 1].nota + dp[i - 1][j - tari[i - 1].costSejur]);

} else {

dp[i][j] = dp[i - 1][j];

int rezultat = dp[numTari][buget];

for (int i = 0; i <= numTari; ++i) {

delete[] dp[i];

delete[] dp;

return rezultat;

int main() {
const int numTari = 10;

Tara tari[numTari];

ifstream fisier("calatorii.txt");

if (!fisier.is_open()) {

return 1;

for (int i = 0; i < numTari; ++i) {

fisier >> tari[i].nume >> tari[i].costSejur >> tari[i].nota;

fisier.close();

int buget = 12000;

afisareTabel(tari, numTari);

int rezultat = calculMaxNota(tari, buget, numTari);

cout << "\nNota maxima obtinuta este: " << rezultat << endl;

return 0;

You might also like