Pagini recente » Cod sursa (job #989917) | Cod sursa (job #1366176) | Cod sursa (job #1899211) | Cod sursa (job #1294955) | Cod sursa (job #1818561)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
const int NMAX = 5001;
const int GMAX = 10001;
int n, G;
pair < int, int > P[NMAX]; // greutate si castig
int A[GMAX], B[GMAX];
void read()
{
int i;
fin >> n >> G;
for (i = 1; i <= n; ++ i)
fin >> P[i].first >> P[i].second;
}
inline int max(int a, int b)
{
return a > b ? a : b;
}
void dp()
{
int i, j;
for (i = 1; i <= n; ++ i)
{
for (j = 1; j <= G; ++ j)
if (P[i].first > j)
A[j] = B[j];
else
A[j] = max(B[j], B[j - P[i].first] + P[i].second);
memcpy(B, A, sizeof(A));
}
}
int main()
{
read();
fin.close();
dp();
fout << A[G] << "\n";
fout.close();
return 0;
}