Cod sursa(job #438011)

Utilizator MirceaMMircea Muscalu MirceaM Data 10 aprilie 2010 13:42:20
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct{
  int a,b;
} gutuie;

int comp(const void *a, const void *b){
    gutuie x=*(gutuie*)a;
    gutuie y=*(gutuie*)b;
    
    if(x.a>y.a) return -1;
    if(x.a==y.a) return (x.b-y.b);
    return 1;
    
}



int main(){
    
    int i,n,k,h,p,u,v[100000],max=0;
    gutuie x[100000];
    
    FILE *f = fopen("gutui.in","rt");
    fscanf(f,"%i %i %i\n",&n,&h,&u);
    for(i=0;i<n;i++)
    {
       fscanf(f,"%i %i\n",&x[i].a,&x[i].b);
       x[i].a=(h-x[i].a)/u;
    }
    close(f);
    
    qsort(&x,n,sizeof(gutuie),comp);
    
    
    
   /* for(i=0;i<n;i++)
      printf("%i %i\n",x[i].a,x[i].b);*/
    
    v[0]=x[0].b;
    
    for(i=1;i<n;i++)
    {
       p=0;
       v[i]=x[i].b;
       for(k=i-1;k>=0;k--)
         {           
              if(x[k].a-p>0) {
                             if(x[k].a==x[i].a+1 && p!=0) break; 
                             v[i]=v[i]+v[k];
                              p++;}               
              if(x[k].a==x[i].a+1) break;
         }
       if(v[i]>max) max=v[i];    
    }
    
 /*   for(i=0;i<n;i++)
      printf("%i ",v[i]);*/
    
    f = fopen("gutui.out","wt");
    fprintf(f,"%i",max);
    close(f);
    
    
    /*getch();*/
    return 0;
}