Cod sursa(job #628908)

Utilizator sebii_cSebastian Claici sebii_c Data 2 noiembrie 2011 12:34:18
Problema Energii Scor 55
Compilator c Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
#define NMAX 1005
#define INF (1<<30)

int W[NMAX], C[NMAX], D[NMAX][NMAX];
int n, Emax;

inline int min(int a, int b)
{
    return (a<b)?a:b;
}

int main()
{
    freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);
    int i, cw;
    scanf("%d %d", &n, &Emax);
    for (i=1; i<=n; ++i)
	scanf("%d %d", &W[i], &C[i]);
    
    for (i=0; i<=n; ++i)
	for (cw=1; cw<=Emax; ++cw)
	    D[i][cw] = INF;
   
    for (cw=1; cw<=Emax; ++cw)
	for (i=1; i<=n; ++i) {
	    if (W[i] <= cw)
		D[i][cw] = min(D[i-1][cw], D[i-1][cw-W[i]]+C[i]);
	    else
		D[i][cw] = min(D[i-1][cw], C[i]);
	}
    
    if (D[n][Emax] == INF)
	printf("-1\n");
    else
	printf("%d\n", D[n][Emax]);
    return 0;
}