Pagini recente » Cod sursa (job #207848) | Cod sursa (job #2014145) | Clasament | Cod sursa (job #1544218) | Cod sursa (job #137445)
Cod sursa(job #137445)
//stalpi
#include<fstream.h>
long int n,x[101], c[101], s[101], d[101],v[101];
long long int min,sum;
/*
long int sort(long int p, long int q)
{long int st=p, dr=q, a=x[st], b=c[st], e=s[st], f=d[st];
while(st<dr)
{while(st<dr && a<=x[dr]) dr--;
x[st]=x[dr]; c[st]=c[dr]; s[st]=s[dr], d[st]=d[dr];
while(st<dr && a>=x[st]) st++;
x[dr]=x[st]; c[dr]=c[st]; s[dr]=s[st], d[dr]=d[st];
}
x[st]=a; c[st]=b; s[st]=e; d[st]=f;
return st;
}
void qsort(long int p, long int q)
{long int m=sort(p,q);
if(m-1>p) qsort(p,m-1);
if(m+1<q) qsort(m+1,q);
}
*/
void afisare()
{for(long int i=1;i<=n;i++)
if(v[i]==0) return;
if(sum<min) min=sum;
}
void back(long int k)
{for(long int i=k;i<=n;i++)
{v[i]++;
sum+=c[i];
if(sum >min) {sum-=c[i]; v[i]--; return;}
for(long int j=1;j<=n;j++)
if(j!=i)
if(x[j]>=(x[i]-s[i]) && x[j]<=(x[i]+d[i]))
v[j]++;
afisare();
back(i+1);
for (j=1;j<=n;j++)
if(j!=i)
if(x[j]>=x[i]-s[i] && x[j]<=x[i]+d[i]);
v[j]--;
sum-=c[i];
v[i]--;
}
}
int main ()
{long int i;
ifstream f("stalpi.in");
ofstream g("stalpi.out");
f>>n;
for(i=1;i<=n;i++)
{f>>x[i]>>c[i]>>s[i]>>d[i]; min+=c[i];}
//qsort(1,n);
back(1);
g<<min;
f.close();g.close();
return 0;
}