Pagini recente » Cod sursa (job #365122) | Cod sursa (job #872194) | Cod sursa (job #3212597) | Cod sursa (job #175481) | Cod sursa (job #3232712)
#include <iostream>
#include <fstream>
#define NMAX 50001
using namespace std;
ifstream fin( "inundatii.in" );
ofstream fout( "inundatii.out" );
struct str {
int x, y, z;
} c[NMAX][2];
int dp[NMAX][2];
int absv( int a ) {
return a > 0 ? a : -a;
}
int dist( str a, str b ) {
return absv( a.x - b.x ) + absv( a.y - b.y ) + absv( a.z - b.z );
}
int main() {
int n;
fin >> n;
for( int i = 1; i <= n; i++ ) {
fin >> c[i][0].x >> c[i][0].y >> c[i][0].z;
}
c[1][1].x = c[1][0].x;
c[1][1].y = c[1][0].y;
c[1][1].z = c[1][0].z;
for( int i = 2; i <= n; i++ ) {
int d = dist( c[i-1][0], c[i][0] ) + 3;
int dd = dist( c[i-1][1], c[i][0] ) + 3;
dp[i][0] = min( dp[i-1][0] + d, dp[i-1][1] + dd );
dp[i][1] = dp[i][0];
if( dp[i-1][0] + d < dp[i-1][1] + dd ) {
c[i][1].x = c[i-1][0].x + 1;
c[i][1].y = c[i-1][0].y + 1;
c[i][1].z = c[i-1][0].z + 1;
}
else {
c[i][1].x = c[i-1][1].x + 1;
c[i][1].y = c[i-1][1].y + 1;
c[i][1].z = c[i-1][1].z + 1;
}
}
fout << dp[n][0];
return 0;
}