Cod sursa(job #920426)
#include <iostream>
#include <fstream>
using namespace std;
#define N 10000
ifstream in("rucsac.in");
ofstream out("rucsac.out");
long n,k,profit[N],g[N],p[N],pmax,i,j;
void citire()
{
in >> n >>k;
for(i =1;i<=n;i++)
in >> g[i] >> p[i];
}
void verificare()
{
for(i=1;i<=n;i++)
{
for(j = k-g[i];j>0;j--)
{
if(profit[j]!=0 && (profit[j] + p[i] >profit[j+g[i]]))
profit[j+g[i]] = profit[j]+p[i];
if(profit[j+g[i]] > pmax)
pmax = profit[j+g[i]];
}
if(g[i] <=k && p[i] > profit[g[i]])
profit[g[i]] = p[i];
pmax = max(pmax, profit[g[i]]);
}
}
void scrie()
{
out << pmax;
}
int main()
{
citire();
verificare();
scrie();
return 0;
}