Pagini recente » Cod sursa (job #597797) | Cod sursa (job #2130126) | Cod sursa (job #2359778) | Cod sursa (job #1003504) | Cod sursa (job #2191525)
#include <cstdio>
#include <algorithm>
#define NMAX 5010
#define GMAX 10010
//int M[NMAX][GMAX];
int W[NMAX], P[NMAX];
int Optim[GMAX];
/*
void creare_matrice(int M[][GMAX], int i, int cw){
M[i][cw] = M[i - 1][cw];
if(cw >= W[i])
M[i][cw] = std::max(M[i - 1][cw], M[i - 1][cw - W[i]] + P[i]);
}
int ineficient(){
register int N, G;
freopen("rucsac.in", "r", stdin);
freopen("rucsac.out", "w", stdout);
scanf("%d%d", &N, &G);
for(int i = 1; i <= N; ++i)
scanf("%d%d", &W[i], &P[i]);
for(int i = 1; i <= N; ++i){
for(int cw = 1; cw <= G; ++cw){
creare_matrice(M ,i, cw);
}
}
return M[N][G];
}
*/
int main(){
register int N, G;
freopen("rucsac.in", "r", stdin);
freopen("rucsac.out", "w", stdout);
scanf("%d%d", &N, &G);
for(int i = 1; i <= N; ++i){
scanf("%d%d", &W[i], &P[i]);
}
int sol = 0;
for (int i = 1; i <= N; ++i){
for (int cw = G - W[i]; cw >= 0; --cw){
if(Optim[cw+W[i]] < Optim[cw] + P[i]){
Optim[cw+W[i]] = Optim[cw] + P[i];
if(Optim[cw+W[i]] > sol)
sol = Optim[cw+W[i]];
}
}
}
printf("%d \n", sol);
return 0;
}