Pagini recente » Cod sursa (job #2915614) | Cod sursa (job #595917) | Cod sursa (job #1369433) | Cod sursa (job #2523189) | Cod sursa (job #137700)
Cod sursa(job #137700)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "stalpi.in"
#define out "stalpi.out"
#define dim 10001
#define infinit (1<<21)
int N;
struct Stalp {
int x, c, s, d;
} H[dim];
int C[dim][dim];
void Qsort(int,int);
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d", &N);
for ( int i = 1; i <= N; i++ )
scanf("%d%d%d%d", &H[i].x, &H[i].c, &H[i].s, &H[i].d);
int st, dr;
for ( int i = 1; i <= N; i++ )
for ( int j = 1; j <= N; j++ )
C[i][j] = infinit;
Qsort(1,N);
for ( int i = 1; i <= N; i++ )
{
int A = dim, B = 0;
st = H[i].x - H[i].s, dr = H[i].x + H[i].d;
for ( int j = 1; j <= N; j++ )
if ( st <= H[j].x && H[j].x <= dr )
{
if ( A > j ) A = j;
if ( B < j ) B = j;
}
if ( C[A][B] > H[i].c ) C[A][B] = H[i].c;
}
for ( int i = 1; i <= N; i++ )
for ( int j = 1; j <= i; j++ )
for ( int x1 = 1; x1 < N; x1++ )
for ( int x2 = x1; x2 <= N; x2++ )
if ( C[x1][x2] > C[x1][i] + C[j][x2] ) C[x1][x2] = C[x1][i] + C[j][x2];
printf("%d", C[1][N]);
}
void Qsort(int st, int dr)
{
int i = st-1, j = dr+1;
Stalp pivot = H[st];
while ( i <= j )
{
do { i++; } while ( H[i].x < pivot.x );
do { j--; } while ( H[j].x > pivot.x );
if ( i < j )
{
Stalp aux;
aux = H[i], H[i] = H[j], H[j] = aux;
}
}
if ( st < j ) Qsort(st,j);
if ( i < dr ) Qsort(i,dr);
}