Pagini recente » Cod sursa (job #368080) | Cod sursa (job #170308) | Cod sursa (job #417561) | Cod sursa (job #1113097) | Cod sursa (job #2049221)
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
FILE *f, *g;
struct concert{
int A, B;
};
int N, A, B;
int Tmax;
vector<concert> C;
vector<int> Best;
concert Make(int A, int B)
{
concert r = {A, B};
return r;
}
bool How(concert c1, concert c2)
{
return c1.B < c2.B;
}
int main()
{
f = fopen ("heavymetal.in", "r");
g = fopen ("heavymetal.out", "w");
fscanf(f, "%d", &N);
for (int i = 1; i <= N; i++)
{
fscanf(f, "%d %d", &A, &B);
C.push_back(Make(A, B));
Tmax = max(Tmax, B);
}
//Sortez crescator dupa campul B.
sort(C.begin(), C.end(), How);
//for (int i = 0; i < N; i++) cout << C[i].A << " " << C[i].B << endl;
Best.push_back(0);
for (int i = 1; i <= Tmax; i++)
{
Best.push_back(Best[i-1]);
for (int j = 0; j < N; j++)
{
if (C[j].B == i) Best[i] = max(Best[i], Best[C[j].A] + (C[j].B - C[j].A));
else if (C[j].B > i) break;
}
}
fprintf(g, "%d", Best[Tmax]);
fclose (f);
fclose (g);
return 0;
}