Cod sursa(job #460184)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 1 iunie 2010 15:32:52
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>   

#define INF 2000000000;
long gen,w,nr,c[1001][5001],cost[1001],energie[1001];
  
  
  long int divide(int i, int j){
       long int  min,l;

       if(j<=0)return 0;//am atins/depasit energia de care aveam nevoie
       if(i==0)return INF;
       if(c[i-1][j]==-1){
          c[i-1][j]=divide(i-1,j);
       }
       c[i][j]=c[i-1][j];
       l=divide(i-1,j-energie[i])+cost[i];
       if(l<c[i][j])c[i][j]=l;
       return c[i][j];
  }
  
  int main(){
     int i,j;
     FILE *fin=fopen("energii.in","r");   
     FILE *fout=fopen("energii.out","w");   
     fscanf(fin,"%ld%ld",&gen,&w);   
     for(i=1;i<=gen;i++)   
         fscanf(fin,"%ld%ld",&energie[i],&cost[i]);   
  
     for(i=0;i<=gen;i++)
        for(j=0;j<=w;j++) 
           c[i][j]=-1;
     
     c[gen][w]=divide(gen,w);
   
     /*for(i=1;i<=gen;i++){
        for(j=1;j<=w;j++) 
          printf("%ld ", c[i][j]);
     printf("\n");
     }*/
   
   if(c[gen][w]<2000000000)fprintf(fout,"%ld",c[gen][w]);
     else fprintf(fout,"-1\n");   
     

   return 0;   
 }