Pagini recente » Cod sursa (job #247950) | Cod sursa (job #1794224) | Cod sursa (job #1933668) | Cod sursa (job #530829) | Cod sursa (job #1807129)
#include <fstream>
#include <algorithm>
#include <cmath>
std::ifstream in ( "wanted.in" );
std::ofstream out( "wanted.out" );
const int DIM = 2e2 + 5;
const long long INF = 1e18 + 5;
std::pair<int, int> pt[DIM];
long long dp[DIM][DIM][2];
int main( int argc, const char *argv[] ) {
std::ios::sync_with_stdio( false );
int n; in >> n;
for( int i = 1; i <= n; i ++ ) {
in >> pt[i].first >> pt[i].second; }
std::sort( pt + 1, pt + n + 1 );
for( int p = 1; p <= n; p ++ ) {
for( int i = 1, j = i + p - 1; j <= n; i ++, j ++ ) {
dp[i][j][0] = dp[i][j][1] = INF;
for( int k = i; k <= j; k ++ ) {
long long c1 = std::max( dp[i][k - 1][1], dp[k + 1][j][0] );
int c2 = std::abs( pt[i - 1].first - pt[k].first ) + pt[i - 1].second + pt[k].second;
int c3 = std::abs( pt[j + 1].first - pt[k].first ) + pt[j + 1].second + pt[k].second;
if( i > 0 ) { dp[i][j][0] = std::min( dp[i][j][0], c1 + c2 ); }
if( j < n ) { dp[i][j][1] = std::min( dp[i][j][1], c1 + c3 ); } } } }
out << dp[1][n][0] << std::endl;
return 0; }