Ranking (as of 2014-08-29): 178 out of 591
Language: C++
/* UVa 10520 - Determine it To build using Visual Studio 2012: cl -EHsc -O2 UVa_10520_Determine_it.cpp */ #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int n_max = 20; long long a[n_max + 1][n_max + 1]; long long aij(int n, int i, int j) { long long result = a[i][j]; if (result != -1) return result; if (i < j) { for (int k = i; k < j; k++) result = max(result, aij(n, i, k) + aij(n, k + 1, j)); } else { long long r0 = 0, r1 = 0; if (i < n) for (int k = i + 1; k <= n; k++) r0 = max(r0, aij(n, k, 1) + aij(n, k, j)); if (j > 0) for (int k = 1; k < j; k++) r1 = max(r1, aij(n, i, k) + aij(n, n, k)); result = r0 + r1; } return a[i][j] = result; } int main() { int n, an1; while (cin >> n >> an1) { memset(a, -1, sizeof(a)); a[n][1] = an1; cout << aij(n, 1, n) << endl; } return 0; }
No comments:
Post a Comment