Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include "bits/stdc++.h"
- using namespace std;
- #define all(a) a.begin(), a.end()
- constexpr int N = 202;
- const int inf = 202;
- short pred[N][N] = {};
- bitset<N> dp[N];
- vector<short> a;
- void dfs(short l, short r) {
- if (l + 2 == r) {
- cout << l + 2 << '\n';
- return;
- }
- short cntr = pred[l][r];
- if (cntr - 1 >= l + 1) {
- dfs(l, cntr);
- }
- if (cntr + 1 <= r - 1) {
- dfs(cntr, r);
- }
- cout << cntr + 1 << '\n';
- }
- signed main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- short n; cin >> n;
- a.resize(n);
- for (short i = 0; i < n; i++) {
- cin >> a[i];
- }
- for (short i = 1; i + 1 < n; i++) {
- if (a[i - 1] > a[i] && a[i] < a[i + 1] || a[i - 1] < a[i] && a[i + 1] < a[i]) {
- dp[i][i] = true;
- pred[i - 1][i + 1] = i;
- }
- }
- for (short len = 2; len < n; len++) {
- for (short l = 0; l + len < n; l++) {
- short r = l + len;
- for (short centr = l + 1; centr <= r - 1; centr++) {
- bool dp1 = (centr - 1 >= l + 1 ? dp[l + 1][centr - 1] : 1);
- bool dp2 = (centr + 1 <= r - 1 ? dp[centr + 1][r - 1] : 1);
- if ((a[centr] > a[l] && a[centr] > a[r] ||
- a[centr] < a[l] && a[centr] < a[r]
- ) && dp1 && dp2) {
- pred[l][r] = centr;
- dp[l + 1][r - 1] = 1;
- break;
- }
- }
- }
- }
- vector<short> dpmin(n + 1, inf), p(n + 1, -1);
- dpmin[1] = 0;
- p[1] = 1;
- for (short i = 2; i <= n; i++) {
- for (short j = 1; j < i; j++) {
- if (dpmin[j] == inf) { continue; }
- short l = j + 1, r = i - 1;
- bool dp1 = (l <= r ? dp[l - 1][r - 1] : 1);
- if (dp1 && a[i - 1] >= a[j - 1] && dpmin[i] > dpmin[j] + (l <= r ? r - l + 1 : 0)) {
- dpmin[i] = dpmin[j] + (l <= r ? r - l + 1 : 0);
- p[i] = j;
- }
- }
- }
- if (dpmin[n] == inf) {
- cout << -1;
- return 0;
- }
- cout << dpmin[n] << '\n';
- for (short v = n; v != p[v]; v = p[v]) {
- if (v - p[v] - 1 > 0) {
- dfs(p[v] - 1, v - 1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement