Pagini recente » Cod sursa (job #2268948) | Cod sursa (job #1202445) | Cod sursa (job #1884992) | Cod sursa (job #2855076) | Cod sursa (job #1866845)
#include <cstdio>
#define WMAX 10001
#define NMAX 5001
#define MAX(A, B) A >= B? A : B
using namespace std;
FILE *f = freopen("energii.in", "r", stdin);
FILE *g = freopen("energii.out", "w", stdout);
int dp[NMAX][WMAX];
int N, GMAX, C[NMAX], G[NMAX];
void read() {
scanf("%d%d", &N, &GMAX);
for(int i = 1; i<=N; i++)
scanf("%d%d", &G[i], &C[i]);
}
void dinamic() {
for(int i = 1; i<=N; i++)
for(int CW = 0; CW <= GMAX; CW ++) {
dp[i][CW] = dp[i - 1][CW];
if(G[i] <= CW)
dp[i][CW] = MAX(dp[i][CW], dp[i - 1][CW - G[i]] + C[i]);
}
//printf("%d", dp[N][GMAX]);
}
int main() {
read();
dinamic();
/*for(int i = 1; i<=N; i++)
{
for(int CW = 0; CW <= GMAX; CW ++){
printf("%d ", dp[i][CW]);
}
printf("\n");
}*/
if(dp[N][GMAX] >= GMAX)
printf("%d", dp[N][GMAX]);
else printf("%d", -1);
return 0;
}