Pagini recente » Cod sursa (job #570649) | Cod sursa (job #1788762) | Cod sursa (job #774338) | Cod sursa (job #348303) | Cod sursa (job #3272997)
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
const int INF = 1e18;
int dp1[201][201],dp2[201][201];
pair<int,int>coords[201];
int dist(pair<int,int>a,pair<int,int>b){
return abs(a.first - b.first) + abs(a.second - b.second);
}
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>coords[i].first>>coords[i].second;
sort(coords+1,coords+1+n);
for(i=1;i<=n;i++)
{
if(i > 1)
dp1[i][i] = dist(coords[i-1],coords[i]);
if(i < n)
dp2[i][i] = dist(coords[i],coords[i+1]);
}
for(int d = 2;d<n;d++)
{
for(int i=1;i+d-1<=n;i++)
{
long long endinterval = i+d-1;
dp1[i][endinterval] = INF;
dp2[i][endinterval] = INF;
for(int k=i;k<=endinterval;k++){
if(k>i)
dp1[i][endinterval] = min(dp1[i][endinterval],dist(coords[i-1],coords[k]) + max(dp1[k+1][endinterval],dp2[i][k-1]))
if(k<endinterval)
dp2[i][endinterval] = min(dp2[i][endinterval],dist(coords[j+1],coords[k]) + max(dp1[k+1][endinterval],dp2[i][k-1]))
}
}
}
int ans = INF;
for(i=1;i<=n;i++)
{
ans = min(ans,dist(coords[0],coords[i]) + max(dp1[1][i-1],dp2[i+1][n]))
}
cout<<ans;
return 0;
}