Pagini recente » Cod sursa (job #2466567) | Cod sursa (job #1710825) | Cod sursa (job #2361954) | Cod sursa (job #1889020) | Cod sursa (job #2978097)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("stalpi.in");
ofstream fout("stalpi.out");
const int nmax = 100000;
int n;
struct elem
{
int poz, cost;
int st, dr;
bool operator < (const elem &other) const
{
return poz < other.poz;
}
};
elem v[nmax + 5];
int dp[nmax + 5];
int findPos(int poz)
{
int st = 0, dr = n;
int r = 0;
while(st <= dr)
{
int mid = (st + dr) >> 1;
if(v[mid].poz < poz)
{
st = mid + 1;
r = mid;
}
else
{
dr = mid - 1;
}
}
return r;
}
signed main()
{
fin >> n;
for(int i = 1; i <= n; i ++)
{
fin >> v[i].poz >> v[i].cost;
fin >> v[i].st >> v[i].dr;
dp[i] = 1e9;
}
sort(v + 1, v + n + 1);
dp[0] = 0;
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= i; j ++)
{
int left = max(1LL, v[j].poz - v[j].st);
int right = v[j].poz + v[j].dr;
if(v[i].poz >= left && v[i].poz <= right)
{
int last = findPos(left);
dp[i] = min(dp[i], dp[last] + v[j].cost);
}
}
}
fout << dp[n] << '\n';
return 0;
}