Pagini recente » Cod sursa (job #1790651) | Cod sursa (job #1401194) | Cod sursa (job #2757452) | Cod sursa (job #414772) | Cod sursa (job #3232777)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define nmax 2001
#define int long long
int x[nmax], y[nmax], z[nmax], n;
int dp[nmax][nmax];
int pozx[nmax], pozy[nmax], pozz[nmax];
void solve( int v[], 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 = 0; i <= n; i++ )
dp[0][i] = 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] );
}
signed main() {
ifstream cin("inundatii.in" );
ofstream cout("inundatii.out" );
int i, rez = 0;
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, pozx );
rez += dp[n][n];
solve( y, pozy );
rez += dp[n][n];
solve( z, pozz );
rez += dp[n][n];
cout << rez;
return 0;
}