Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- input
- ------
- 3
- 7
- 45 3 92 8 14 30 7
- 10
- 1 10 2 9 3 8 4 7 5 6
- 10
- 2 9 3 8 4 7 5 6 12 11
- output
- -------
- #1 9898
- #2 498
- #3 608
- Code
- -----
- #include <bits/stdc++.h>
- using namespace std;
- int n, ballons[100], flag[100], A[100], maxValue, used[100];
- int left(int x) {
- for (int i = x - 1; i >= 0; i--) {
- if (!used[i])
- return ballons[i];
- }
- return 0;
- }
- int right(int x) {
- for (int i = x + 1; i < n; i++) {
- if (!used[i])
- return ballons[i];
- }
- return 0;
- }
- int calculate(int i) {
- int v, l, r;
- v = 1;
- l = left(A[i]);
- r = right(A[i]);
- if (l > 0)
- v *= l;
- if (r > 0)
- v *= r;
- return v;
- }
- void solve(int i, int v) {
- int cv;
- if (i == n) {
- if (v > maxValue)
- maxValue = v - 1;
- }
- else {
- for (int j = 0; j < n; j++) {
- if (!flag[j]) {
- A[i] = j;
- flag[j] = 1;
- used[j] = 1;
- cv = calculate(i);
- solve(i + 1, v + cv);
- flag[j] = 0;
- used[j] = 0;
- }
- }
- }
- }
- int main() {
- int tc;
- freopen("bal.txt", "r", stdin);
- cin >> tc;
- while (tc--) {
- cin >> n;
- for (int i = 0; i < n; i++)
- cin >> ballons[i];
- maxValue = 0;
- solve(0, 0);
- cout << maxValue << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement