Pagini recente » Cod sursa (job #1861633) | Cod sursa (job #2447574) | Cod sursa (job #2813848) | Cod sursa (job #1679680) | Cod sursa (job #137544)
Cod sursa(job #137544)
#include<stdio.h>
long int n,x[100],c[100],st[100],dr[100],v[100],viz,i,Ct,j,sol;
void heapdown(long int ii,long int nn);
void swap(long int aa,long int bb);
void cmin(long int i);
int main()
{ FILE *f=fopen("stalpi.in","r"),
*g=fopen("stalpi.out","w");
fscanf(f,"%ld",&n);
for(i=1;i<=n;i++)
{ fscanf(f,"%ld%ld%ld%ld",&x[i],&c[i],&st[i],&dr[i]); sol+=c[i];}
// sortez dupa x
for(i=n/2;i>=1;i--) heapdown(i,n);
for(i=n;i>=1;i--){ swap(1,i);
heapdown(1,i-1);
}
//sol x[i]
i=1;
cmin(i);
//afisare sol
fprintf(g,"%ld",sol);
fcloseall();
return 0;
}
void heapdown(long int ii, long int nn)
{ long int is, id;
is=ii*2;
id=ii*2+1;
if(is>nn) return;
if(nn%2==1) if(x[is]<x[id]) is=id;
if(x[ii]<x[is]){ swap(is,ii);
heapdown(is,nn);
}
}
void swap(long int aa, long int bb)
{ long int aux;
aux=x[aa]; x[aa]=x[bb]; x[bb]=aux;
aux=c[aa]; c[aa]=c[bb]; c[bb]=aux;
aux=st[aa]; st[aa]=st[bb]; st[bb]=aux;
aux=dr[aa]; dr[aa]=dr[bb]; dr[bb]=aux;
}
void cmin(long int i)
{
if(viz<n)
{ int aux;
//da
Ct+=c[i];
aux=viz;
for(j=i-1;x[j]>=i-st[i]&&j>=1;j++)
viz++;
for(j=i+1;x[j]<=i+dr[i]&&j<=n;j++)
viz++;
if(viz==n) if(sol>Ct) sol=Ct;
else cmin(i+1);
viz=aux;
Ct-=c[i];
cmin(i++);
}
}