Pagini recente » Cod sursa (job #3182706) | Cod sursa (job #685444) | Cod sursa (job #3262500) | Cod sursa (job #3253184) | Cod sursa (job #3232772)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 500
int x[nmax], y[nmax], z[nmax], n;
int sol[3][nmax][nmax];
int pozx[nmax], pozy[nmax], pozz[nmax];
void solve( int v[], int dp[nmax][nmax], int poz[] ) {
int i, j;
for( i = 1; i <= n; i++ )
dp[i][0] = dp[i - 1][0] + abs( v[i] - poz[0] );
for( i = 1; i <= n; i++ )
for( j = 1; j <= n; j++ )
dp[i][j] = min( dp[i - 1][j] + abs( v[i] - poz[j] ), dp[i][j - 1] );
}
int main() {
ifstream cin("inundatii.in" );
ofstream cout("inundatii.out" );
int i;
cin >> n;
for( i = 1; i <= n; i++ ) {
cin >> x[i] >> y[i] >> z[i];
x[i] -= i;
y[i] -= i;
z[i] -= i;
pozx[i] = x[i];
pozy[i] = y[i];
pozz[i] = z[i];
}
sort( pozx + 1, pozx + n + 1 );
sort( pozy + 1, pozy + n + 1 );
sort( pozz + 1, pozz + n + 1 );
solve( x, sol[0], pozx );
solve( y, sol[1], pozy );
solve( z, sol[2], pozz );
cout << sol[0][n][n] + sol[1][n][n] + sol[2][n][n];
return 0;
}