#include #include #include #include #define REP(i, cnt) for (int i = 0; i < (cnt); i++) #define N 100 using namespace std; typedef long long int64; int mat[N][N]; int front[N]; int side[N]; int curFront[N]; int curSide[N]; int size; int count; int getMaxFrontIndex() { int max = 0; int maxIndex = 0; for (int i=0; i max) { max = front[i] - curFront[i]; maxIndex = i; } } //cout << "get front index returns " << maxIndex << endl; return maxIndex; } int getMaxSideIndex() { int max = 0; int maxIndex = 0; for (int i=0; i max) { max = side[i] - curSide[i]; maxIndex = i; } } //cout << "get side index returns " << maxIndex << endl; return maxIndex; } int main() { for (int i = 0; i < N; i++) { for (int j = 1; j < N; j++) { mat[i][j] = 0; } } /*REP(i, N) printf("%d ", dyn[0][i]); printf("\n"); REP(i, N) printf("%d ", dyn[1][i]); printf("\n"); return 0;*/ scanf("%d", &count); { //cout << "count " << count << endl; REP(i, count) { scanf("%d", &size); //cout << "size " << size << endl; for (int e = 0; e < N; e++) { for (int j = 1; j < N; j++) { mat[e][j] = 0; } } for (int j=0; j side[sideIndex] - curSide[sideIndex]) { if (curSide[sideIndex] < front[frontIndex]) curSide[sideIndex] = front[frontIndex]; if (curFront[frontIndex] < front[frontIndex]) curFront[frontIndex] = front[frontIndex]; min += front[frontIndex]; //cout << "adding " << front[frontIndex] << endl; } else { if (curSide[sideIndex] < side[sideIndex]) curSide[sideIndex] = side[sideIndex]; if (curFront[frontIndex] < side[sideIndex]) curFront[frontIndex] = side[sideIndex]; min += side[sideIndex]; //cout << "adding " << side[sideIndex] << endl; } } for (int j=0; j