Cod sursa(job #438586)

Utilizator alexandru138Irimia Alexandru alexandru138 Data 10 aprilie 2010 21:26:44
Problema Gutui Scor 10
Compilator c Status done
Runda teme_upb Marime 0.94 kb
#include <stdio.h>
#define max 100000


typedef struct gutui {
    int h;     // inaltime
    int m;     // masa
} gutui;


int comp(void* a,void* b)
{ if ( ((gutui*)a)->h < ((gutui*)b)->h) return 1;
  if ( ((gutui*)a)->h == ((gutui*)b)->h) {if ( ((gutui*)a)->m < ((gutui*)b)->m) return 1;}
  return -1;}


int main() {

FILE* s = fopen("gutui.in","r");
FILE* d = fopen("gutui.out","w");

gutui vect[max];
int n,h,u,i,j,masa,maxmasa,crt;

//citesc datele
fscanf(s,"%i",&n);
fscanf(s,"%i",&h);
fscanf(s,"%i",&u);
for (i=0;i<n;i++)
	{fscanf(s,"%i",&vect[i].h);
	 fscanf(s,"%i",&vect[i].m);}
//
qsort(vect,n,sizeof(gutui),comp);
//for (i=0;i<n;i++) printf("%i %i\n", vect[i].h,vect[i].m);
maxmasa=vect[0].m;

for (i=0;i<n-1;i++) {    
	masa=vect[i].m;
        crt=1;
	for (j=i+1;j<n;j++) 
	  if (vect[j].h + u * crt <= h ) {masa=masa+vect[j].m;crt++;}
        if (masa>maxmasa) maxmasa=masa;
}




fprintf(d,"%i \n", maxmasa);

fclose(s);
fclose(d);
return 0;
}