/* FILE: collage.cpp last change: 20-Sept-2012 author: Romeo Rizzi * a solver for problem "collage" in the 28-Sept-2012 exam in Algorithms. */ #define NDEBUG // NDEBUG disabilita tutte le assert se definita prima di includere #include #ifndef NDEBUG # include // non voglio includerla quando Non compilo in modalita' DEBUG #endif #include using namespace std; const int MAX_N = 1000; int n; int color[MAX_N]; int memo[MAX_N +1][MAX_N +1]; int main (int argc, char** argv) { ifstream in("input.txt"); assert( in ); in >> n; for(int i = 0; i < n; ++i) in >> color[i]; in.close(); for(int i = n-1; i >= 0; --i) for(int j = 0; j < n; ++j) if( i>j ) memo[i][j] = 0; else { memo[i][j] = 1 + memo[i+1][j]; for(int sec = 1; i + sec <= j; ++sec) if( color[i+sec] == color[i] ) memo[i][j] = min(memo[i][j], memo[i+1][i+sec-1] + memo[i+sec][j]); } ofstream out("output.txt"); assert( out ); out << memo[0][n-1] << endl; out.close(); return 0; }