Pagini recente » Cod sursa (job #425381) | Cod sursa (job #2292013) | Cod sursa (job #1227251) | Cod sursa (job #1414281) | Cod sursa (job #1425526)
#include <stdio.h>
#include <string.h>
const char *FI = "rucsac.in", *FO= "rucsac.out";
const int MAX_N = 5000;
const int MAX_G = 10000;
struct Elem {
int w,p;
void Read () {
scanf("%d%d",&w,&p);
}
}v[MAX_N + 1];
inline int MAX (int a, int b) { return (a > b) ? a : b; }
int d[MAX_G + 2];
int main(int argc, const char * argv[]) {
freopen (FI,"r",stdin);
freopen(FO,"w",stdout);
int N,G,P = 0;
scanf("%d%d",&N,&G);
memset(d,-1,sizeof(d)), d[0] = 0;
for (int i=1; i <= N; ++ i)
v[i].Read();
for (int i=1; i <= N; ++ i) {
for (int j = P; j > -1 ; -- j) {
if (j + v[i].w <= G) {
if (d[j] > -1) {
d[j + v[i].w] = MAX (d[j + v[i].w], d[j] + v[i].p);
P =MAX (P,j + v[i].w);
}
}
}
}
int Ans = 0;
for (int i=1; i <= G; ++ i)
Ans = MAX (d[i],Ans);
printf("%d\n",Ans);
return 0;
}