Cod sursa(job #500732)

Utilizator FERI24Forrai Francisc FERI24 Data 12 noiembrie 2010 22:43:14
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdlib.h>
#include<stdio.h>
#include<limits.h>

int v[5001], n, w, max, inf=LONG_MAX, energ, cost;

int main()
{
  FILE* in  = fopen("energii.in", "r");
  FILE* out = fopen("energii.out", "w");

  fscanf(in, "%d %d", &n, &w);

  for(int i=1; i<=w; i++)
      v[i] = inf;

  for(int i=0; i<n; i++)
  {
    fscanf(in, "%d %d", &energ, &cost);
    for(int j=max; j>=0; j--)
    {
       if(v[j] != inf)
       {
          if(j+energ <= w)
          {
             if(v[j] + cost <= v[j+energ])
             {
               v[j+energ] = v[j] + cost;
               if(j+energ > max)
                  max = j+energ;
             }
          }
          else
          {
             if(v[w] > v[j] + cost)
             {
               v[w] = v[j] + cost;
               max = w;
             }
          }
       }
    }
  }

  if(v[w] == inf)
     fprintf(out, "-1");
  else
     fprintf(out, "%d", v[w]);

  return 0;
}