Cod sursa(job #463107)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE *fin,*fout;
int i,j,U,H,N,g_max,max,ales;
int **gutui,**mat,*culeasa;
/*if(argc!=3){
printf("Numar incorect de parametrii !\n");
exit(0);
}*/
//se deschid fisere si se citesc datele de intrare
fin=fopen("gutui.in","r");
fout=fopen("gutui.out","w");
fscanf(fin,"%d %d %d",&N,&H,&U);
mat=(int**)malloc(N*sizeof(int*));
for(i=0;i<N;i++)
mat[i]=(int*)malloc(2*sizeof(int));
gutui=(int**)malloc(N*sizeof(int*));
for(i=0;i<N;i++)
gutui[i]=(int*)malloc(2*sizeof(int));
culeasa=(int*)calloc(N,sizeof(int));
for(i=0;i<N;i++){
fscanf(fin,"%d %d\n",&mat[i][0],&mat[i][1]);
}
for(i=0;i<N;i++){
gutui[i][0]=(H-mat[i][0])/U+1;
gutui[i][1]=mat[i][1];
}
for(i=0;i<N;i++){
for(j=i;j<N;j++){
if(gutui[i][0]<gutui[j][0]){
int aux1=gutui[i][0];
int aux2=gutui[i][1];
gutui[i][0]=gutui[j][0];
gutui[i][1]=gutui[j][1];
gutui[j][0]=aux1;
gutui[j][1]=aux2;
}
}
}
max=0;
g_max=0;
ales=-1;
for(i=gutui[0][0];i>0;i--){
for(j=0;j<N;j++){
if(gutui[j][0]>=i && culeasa[j]==0){
if(gutui[j][1]>max){
max=gutui[j][1];
ales=j;
}
}
}
culeasa[ales]=1;
g_max+=max;
max=0;
ales=-1;
}
fprintf(fout,"%d\n",g_max);
return 0;
}