Pagini recente » Cod sursa (job #75216) | Cod sursa (job #2082203) | Cod sursa (job #15215) | Cod sursa (job #137455) | Cod sursa (job #777894)
Cod sursa(job #777894)
#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, SOL = INF;
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]);
}
}
int main()
{
read();
if (sum < G)
fprintf (g, "-1\n");
else
{
solve();
for (int cw = G; cw <= sum; cw++)
if (D[N][cw] < SOL)
SOL = D[N][cw];
fprintf (g, "%d\n", SOL);
}
fclose(f);
fclose(g);
return 0;
}