Cod sursa(job #639849)
#include <stdio.h>
#define NMAX 5002
#define GMAX 10002
int w[NMAX],p[NMAX];
int C[2][GMAX];
inline int max(int a, int b)
{
return a>b? a:b;
}
int main()
{
freopen("rucsac.in", "r", stdin);
freopen("rucsac.out", "w", stdout);
int n,i,Gmax,b,g;
scanf("%d%d", &n, &Gmax);
for(i = 1; i <= n; ++i)
scanf("%d%d", &w[i], &p[i]);
b=1;
for (i=1;i<=n;++i)
{
b^=1;
for (g=0;g<=Gmax;++g)
{
C[b][g]=C[b^1][g];
if (w[g]<=g)
C[b][g]=max(C[b][g],C[b^1][g-w[i]]+p[i]);
}
}
printf("%d\n",C[b][Gmax]);
return 0;
}