Pagini recente » Cod sursa (job #2086266) | Cod sursa (job #1105036) | Cod sursa (job #1324821) | Cod sursa (job #1400420) | Cod sursa (job #137485)
Cod sursa(job #137485)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int N_MAX = 100010;
const int INF = 2000000000;
int a[N_MAX][2];
struct stalp {
int X, C, S, D;
} v[N_MAX];
int cmp(stalp a, stalp b)
{
return (a.X < b.X);
}
inline int MIN(int a, int b)
{
return (a < b ? a : b);
}
int main()
{
freopen("stalpi.in", "r", stdin);
#ifndef _SCREEN_
freopen("stalpi.out", "w", stdout);
#endif
int N, i;
scanf("%d\n", &N);
for (i = 1; i <= N; i ++) {
scanf("%d %d %d %d\n", &v[i].X, &v[i].C, &v[i].S, &v[i].D);
a[i][0] = a[i][1] = INF;
}
sort(v + 1, v + N + 1, cmp);
a[1][1] = v[1].C;
int j;
for (i = 2; i <= N; i ++) {
for (j = i - 1; j >= 1; j --) {
if (v[j].X + v[j].D >= v[i].X && a[j][1] <= a[i][0]) a[i][0] = a[j][1];
}
if (v[i].X - v[i].S <= 0) a[i][1] = v[i].C;
// a[i][1] = MIN(a[i][1], (MIN(a[i - 1][1], a[i - 1][0]) + v[i].C));
for (j = i - 1; j >= 1; j --) {
if (v[j].X < v[i].X - v[i].S) {
a[i][1] = MIN(a[i][1], MIN(a[j][0], a[j][1]) + v[i].C);
break;
} else {
a[i][1] = MIN(a[i][1], MIN(a[j][0], a[j][1]) + v[i].C);
}
}
}
printf("%d\n", MIN(a[N][1], a[N][0]));
return 0;
}