Cod sursa(job #3232774)

Utilizator elisa.ipateElisa Ipate elisa.ipate Data 1 iunie 2024 12:38:09
Problema Inundatii Scor 10
Compilator cpp-64 Status done
Runda Simulare E4 #1 Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <algorithm>

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;
}