Pagini recente » Cod sursa (job #2789917) | Cod sursa (job #721958) | Cod sursa (job #1829074) | Cod sursa (job #3003281) | Cod sursa (job #1425638)
#include <stdio.h>
#include <string.h>
const char *FI = "energii.in";
const char *FO = "energii.out";
int E[1001], P[1001], D[1001];
inline int MIN (int a, int b) { return (a > b) ? b : a; }
inline int MAX (int a, int b) { return (a > b) ? a : b; }
int main(int argc, const char * argv[]) {
freopen (FI, "r", stdin);
freopen (FO, "w", stdout);
int G, W, Poz = 0;
scanf( "%d%d", &G, &W);
memset ( D, -1, sizeof(D) ), D[0] = 0;
for (int i=1; i <= G; ++ i)
scanf( "%d%d", &E[i], &P[i]);
for (int i=1; i <= G; ++ i) {
for (int j = Poz; j > -1; -- j) {
if (j + E[i] >= W and D[j] > -1) {
D[j + E[i]] = MAX (D[j + E[i]], D[j] + P[i]);
Poz = (Poz < (j + E[i])) ? (E[i] + j) : Poz;
}
}
}
int Ans = (1LL << 31) - 1;
for (int i = G; i <= 1001; ++ i)
if (D[i] >= G)
Ans = MIN (D[i],Ans);
printf("%d\n",Ans);
return 0;
}