Pagini recente » Cod sursa (job #73871) | Cod sursa (job #1278271) | Cod sursa (job #2952487) | Cod sursa (job #936554) | Cod sursa (job #1866869)
#include <cstdio>
#define WMAX 10001
#define NMAX 5001
#define MIN(A, B) A <= B? A : B
#define INF 1e9
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 = 0; i<=N; i++)
for(int CW = 0; CW <= GMAX; CW ++)
dp[i][CW] = INF;
for(int i = 1; i<=N; i++)
for(int CW = 0; CW <= GMAX; CW ++) {
if(G[i] < CW)
dp[i][CW] = MIN(dp[i - 1][CW], dp[i - 1][CW - G[i]] + C[i]);
else dp[i][CW] = MIN(dp[i - 1][CW], C[i]);
}
//printf("%d", dp[N][GMAX]);
}
int main() {
read();
dinamic();
if(dp[N][GMAX] == INF)
printf("%d", -1);
else printf("%d", dp[N][GMAX]);
return 0;
}