Pagini recente » Arhiva de probleme | Sport | Cod sursa (job #3220564) | Cod sursa (job #2472414) | Cod sursa (job #2718864)
#include <bits/stdc++.h>
#define inf (1 << 30)
#define NMAX 205
using namespace std;
ifstream fin("wanted.in");
ofstream fout("wanted.out");
struct chestie{
int x, y;
}v[NMAX];
int dp[2][NMAX][NMAX];
inline bool cmp(chestie a, chestie b){
return a.x < b.x;
}
int work(int st, int dr, int cp){
if(st > dr)
return 0;
if(dp[cp][st][dr] == inf){
for(int k = st; k <= dr; ++k){
int val = max(work(st, k - 1, 1), work(k + 1, dr, 0));
if(cp == 0)
dp[cp][st][dr] = min(dp[cp][st][dr], abs(v[k].x - v[st - 1].x) + v[k].y + v[st - 1].y + val);
else dp[cp][st][dr] = min(dp[cp][st][dr], abs(v[k].x - v[dr + 1].x) + v[k].y + v[st + 1].y + val);
}
}
return dp[cp][st][dr];
}
int main()
{
int n;
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> v[i].x >> v[i].y;
sort(v + 1, v + n + 1, cmp);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
dp[0][i][j] = dp[1][i][j] = inf;
fout << work(1, n, 0) << '\n';
return 0;
}