Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
4
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
891
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
947
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
937
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4308
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2598
0
Решение задачи Скобки(3) с Меньшиков
Без пояснения   Просмотров: 1257
Определим правильные скобочные выражения так:
Пустое выражение - правильное.
Если выражение S правильное, то (S) и [S] также правильные.
Если выражения A и B правильные, то и выражение AB - правильное.
Дана последовательность скобок "(", ")", "[" и "]". Требуется найти самое короткое правильное выражение, в котором данная последовательность является подпоследовательностью, то есть такое, из которого можно вычеркнуть некоторые символы (возможно, ноль) и получить исходную последовательность, не меняя порядок оставшихся.
Ограничения: исходная последовательность содержит не более 100 скобок.
Пустое выражение - правильное.
Если выражение S правильное, то (S) и [S] также правильные.
Если выражения A и B правильные, то и выражение AB - правильное.
Дана последовательность скобок "(", ")", "[" и "]". Требуется найти самое короткое правильное выражение, в котором данная последовательность является подпоследовательностью, то есть такое, из которого можно вычеркнуть некоторые символы (возможно, ноль) и получить исходную последовательность, не меняя порядок оставшихся.
Ограничения: исходная последовательность содержит не более 100 скобок.
Код
#include #include #include #include using namespace std; const int MAX_VALUE = 1e9; int n; string str; vector > mas; void input() { cin>>str; n = str.size(); mas = vector >(n,vector (n,0)); } string open = "(["; string clos = ")]"; bool isPair(char f, char s) { int posF = open.find(f); int posS = clos.find(s); return posF == posS && posF != -1; } string Pair(char one) { int pos = open.find(one); if (pos == -1) pos = clos.find(one); return string(&open[pos],1) + string(&clos[pos],1); } string getAnswer(int l, int r) { if (l > r) return ""; if (l == r) return Pair(str[l]); int border = (isPair(str[l],str[r]) ? mas[l+1][r-1] : MAX_VALUE); if (border == mas[l][r]) return str[l] + getAnswer(l+1,r-1) + str[r]; for (int m = l; m < r; m++) { if (mas[l][m] + mas[m+1][r] == mas[l][r]) return getAnswer(l,m) + getAnswer(m+1,r); } } void solve() { for (int i=0;i =n) break; int curLen = MAX_VALUE; if (isPair(str[i],str[j])) curLen = mas[i+1][j-1]; for (int m = i; m < j; m++) curLen = min(curLen, mas[i][m] + mas[m+1][j]); mas[i][j] = curLen; } } string answer = ""; answer = getAnswer(0,n-1); cout<
 
 
 
 
 
Автор: Администратор
Автор: Администратор
Комментарии
info@mycod.net  
Карта сайта  
Правообладателям
Заявка на расчет
×
или напишите нам прямо сейчас: