Pagini recente » Cod sursa (job #219930) | Cod sursa (job #2749692) | Cod sursa (job #2101623) | Cod sursa (job #934994) | Cod sursa (job #137277)
Cod sursa(job #137277)
#include <stdio.h>
#include <algorithm>
#define NM 100002
#define inf 2000000
using namespace std;
struct nod{ int c, s, d, x;};
long a[NM][2];
nod stalp[NM];
long n;
int cmp(nod a, nod b)
{
return a.x<b.x;
}
int main()
{
freopen("stalpi.in","r",stdin);
freopen("stalpi.out","w",stdout);
scanf("%ld", &n);
for (long i=1; i<=n; ++i)
scanf("%ld %ld %ld %ld", &stalp[i].x, &stalp[i].c, &stalp[i].s, &stalp[i].d);
long min=inf;
sort(stalp+1,stalp+n, cmp);
a[1][0]=0;a[1][1]=stalp[1].c;
for (long i=2; i<=n; ++i)
{
min=inf;
for (long j=i-1; j>0; --j)
if (stalp[i].x<=stalp[j].x+stalp[j].d && min>a[j][1]) min=a[j][1];
if (min==inf) a[i][0]=inf;
else a[i][0]=min;
min=inf;
for (long j=i-1; j>0; --j)
if (stalp[j].x>=stalp[i].x-stalp[i].s)
{
if (min>a[j][0]+stalp[i].c) min=a[j][0]+stalp[i].c;
if (min>a[j][1]+stalp[i].c) min=a[j][1]+stalp[i].c;
}
if (min==inf) a[i][1]=a[i-1][1]+stalp[i].c;
else a[i][1]=min;
}
min=a[n][0]<a[n][1] ? a[n][0] : a[n][1];
printf("%ld", min);
fclose(stdin);
fclose(stdout);
return 0;
}