Cod sursa(job #130191)

Utilizator floringh06Florin Ghesu floringh06 Data 31 ianuarie 2008 16:17:41
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>   
#include<cstring>

using namespace std;

#define FIN "energii.in"
#define FOUT "energii.out"
#define MAX_N 10005   
#define INF 0x3f3f3f3f   

int G, W, i;
int A[MAX_N];
int E[MAX_N];
int C[MAX_N];
   
  
    void ks()   
    {   
        int i, j;
        int BEST = INF;
        memset (A, INF, sizeof (A));   
        A[0] = 0;

        for(i = 1; i <= G; ++i)   
           for(j = W; j >= 0; --j)   
              if(A[j] < INF)   
              {   
                  if(W <= j + E[i] && A[j] + C[i] < BEST) BEST = A[j] + C[i];   
                  if(j + E[i] < W && A[j] + C[i] < A[j + E[i]]) A[j + E[i]] = A[j] + C[i];   
              }   
        if (BEST != INF) printf ("%d\n", BEST); else printf ("-1\n");
    }
       
    int main()   
    {   
        freopen(FIN, "r", stdin);   
        freopen(FOUT, "w", stdout);   
    
        scanf("%d %d", &G, &W);   
        for(i = 1; i <= G; ++i)   
            scanf("%d %d",E + i, C + i);   
    
        ks();   
        
        return 0;   
    }