Pagini recente » Cod sursa (job #404118) | Cod sursa (job #575644) | Cod sursa (job #1988163) | Cod sursa (job #2716260) | Cod sursa (job #3232780)
#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[2][nmax];
int pozx[nmax], pozy[nmax], pozz[nmax];
void solve( int v[], int poz[] ) {
int i, j;
for( i = 0; i <= n; i++ )
dp[0][i] = dp[1][i] = 0;
for( i = 1; i <= n; i++ ) {
dp[i % 2][0] = dp[(i - 1) % 2][0] + abs( v[i] - poz[0] );
for (j = 1; j <= n; j++)
dp[i % 2][j] = min(dp[(i - 1) % 2][j] + abs(v[i] - poz[j]), dp[i % 2][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 % 2][n];
solve( y, pozy );
rez += dp[n % 2][n];
solve( z, pozz );
rez += dp[n % 2][n];
cout << rez;
return 0;
}