Pagini recente » Cod sursa (job #992297) | Cod sursa (job #602528) | Cod sursa (job #1386846) | Cod sursa (job #1232869) | Cod sursa (job #2971009)
#include <bits/stdc++.h>
#define NMAX 100000
#define int64 long long
#define int long long
using namespace std;
struct strstalp {
int x, s, d, c;
int lindex, rindex;
};
strstalp v[NMAX + 1];
int64 dp[NMAX + 1][2];
bool cmp(strstalp A, strstalp B) {
return A.x < B.x;
}
int bs_left(int st, int dr, int poz) {
int mij, sol;
sol = dr;
while (st <= dr) {
mij = (st + dr ) / 2;
if (v[mij].x >= poz) {
sol = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
return sol;
}
int bs_right(int st, int dr, int poz) {
int mij, sol;
sol = dr;
while (st <= dr) {
mij = (st + dr ) / 2;
if (v[mij].x <= poz) {
sol = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
return sol;
}
signed main() {
freopen("stalpi.in", "r", stdin);
freopen("stalpi.out", "w", stdout);
int n, i, j;
cin >> n;
for (i = 1; i <= n; i++) {
cin >> v[i].x >> v[i].c >> v[i].s >> v[i].d;
}
sort(v + 1, v + n + 1, cmp);
for (i = 1; i <= n; i++) {
v[i].lindex = bs_left(1, i, v[i].x - v[i].s);
v[i].rindex = bs_right(i, n, v[i].x + v[i].d);
}
for (i = 1; i <= n; i++) {
dp[i][1] = dp[v[i].lindex - 1][0] + v[i].c;
for (j = v[i].lindex; j < i; j++)
dp[i][1] = min(dp[i][1], dp[j][0] + v[i].c);
dp[i][0] = dp[i][1];
for (j = 1; j < i; j++) {
if (v[j].rindex >= i)
dp[i][0] = min(dp[i][0], dp[j][1]);
}
}
if (dp[n][0] < 0)
return 1;
cout << dp[n][0];
return 0;
}