Pagini recente » Cod sursa (job #2423822) | Cod sursa (job #3121951) | Cod sursa (job #925180) | Cod sursa (job #64248) | Cod sursa (job #2315174)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
struct obiect
{
int c, g;
};
int n, G;
vector <obiect> o;
vector <vector<int>> d; //d[i][j]=costul maxim pe care il obtinem considerand doar primele i obiecte, avand la dispozitie greutate j
void citire()
{
f >> n >> G;
o.resize(n + 3);
d.resize(n + 3);
int i;
for (i = 1; i <= n; i++)
{
f >> o[i].g >> o[i].c;
d[i].resize(G + 3);
}
f.close();
}
int main()
{
citire();
int i, j;
for (j = 1; j <= G; j++) //pentru primul obiect
{
d[1][j] = 0;
if (o[1].g <= j)
d[1][j] = o[1].c;
}
for (i = 2; i <= n; i++) //pentru greutate 1
{
d[i][1] = 0;
if (o[i].g <= 1)
d[i][1] = o[i].c;
}
for (i = 2; i <= n; i++)
{
for (j = 1; j <= G; j++)
{
if(j>o[i].g)
d[i][j] = max(d[i-1][j],d[i-1][j-o[i].g]+o[i].c);
}
}
g << d[n][G] << "\n";
g.close();
return 0;
}