Pagini recente » Cod sursa (job #2648335) | Cod sursa (job #2226404) | Cod sursa (job #1410291) | Cod sursa (job #1889379) | Cod sursa (job #3235518)
#include <fstream>
#include <vector>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream cin("rucsacfr.in");
ofstream cout("rucsacfr.out");
struct rucsac
{
int g, p;
};
ostream &operator<<(ostream &os, rucsac a)
{
return os << a.g << " " << a.p;
}
bool comp(rucsac a, rucsac b)
{
return ((double)a.p / (double)a.g) > ((double)b.p / (double)b.g);
}
vector<rucsac> obiecte;
int greedy(vector<rucsac> &cv, int k)
{
vector<rucsac> v = cv;
sort(v.begin(), v.end(), comp);
size_t i = 0;
double val = 0;
while (k)
{
if (v[i].g <= k)
{
val += v[i].p;
k -= v[i].g;
i++;
}
else
{
break;
}
}
return val;
}
int back(vector<rucsac> &v, int n, int k)
{
if (k == 0 || n < 0)
{
return 0;
}
if (v[n].g > k)
{
return back(v, n - 1, k);
}
else
{
return max(back(v, n - 1, k), v[n].p + back(v, n - 1, k - v[n].g));
}
}
int main()
{
size_t n;
int k;
cin >> n >> k;
for (size_t i = 0; i < n; i++)
{
rucsac local;
cin >> local.g >> local.p;
obiecte.push_back(local);
}
// int greed = greedy(obiecte, k);
int bck = back(obiecte, obiecte.size() - 1, k);
cout << bck;
}