Pagini recente » Cod sursa (job #1863062) | Cod sursa (job #3207028) | Cod sursa (job #3181728) | Cod sursa (job #38780) | Cod sursa (job #777867)
Cod sursa(job #777867)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxN 1005
#define maxG 5005
#define INF 0x3f3f3f3f
using namespace std;
FILE *f = fopen ("energii.in","r");
FILE *g = fopen ("energii.out","w");
int N, G, E[maxN], C[maxN], sum;
int D[maxN][maxG];
void read()
{
fscanf (f, "%d%d", &N, &G);
for (int i = 1; i <= N; i++) {
fscanf (f, "%d%d", &E[i], &C[i]);
sum += E[i];
}
}
int solve()
{
memset (D, INF, sizeof(D) );
D[0][0] = 0;
for (int i = 1; i <= N; i++)
for (int cw = 0; cw <= sum; cw++)
{
D[i][cw] = D[i - 1][cw];
if (E[i] <= cw)
D[i][cw] = min(D[i][cw], D[i - 1][cw - E[i] ] + C[i]);
if (cw >= G && D[N][cw] != INF)
return D[N][cw];
}
}
int main()
{
read();
if (sum < G)
fprintf (g, "-1\n");
else
fprintf (g, "%d\n", solve() );
fclose(f);
fclose(g);
return 0;
}