Название Описание
Многоугольники (Многоугольник) является одиночная игра, чтобы играть в игру, начало данного многоугольника, состоящего из N вершин (в примере, показанном на фиг. 1, N = 4), каждая вершина присваивается целое значение, и каждый края были даны символ + (операция сложения), или * (умножение), последовательно со всех сторон целое число от 1 до N идентификации.
Рисунок 1: графическое представление многоугольника первого движения (первый ход), будут удалены, чтобы один край; каждый последующий сдвиг последовательности (subsequentmoves), включающие в себя следующие этапы:
1, выберите ребро Е, а вершина Е V1 и V2 с помощью муфты;
2, с новой вершиной, ребро Е и замещенные две вершины V1 и V2 подсоединены. Новые вершины, чтобы получить новое значение, это значение V1 и V2, обозначенные как Е, состоящие расчетным путем, полученные результаты.
После того, как все ребра были удалены, оставляя только вершину, игра заканчивается. Игра оценка является значение вершины. Ниже приведен пример игры: многоугольник рассмотрим рисунок 1.
Первый шаг игроков , чтобы удалить статью 3 стороны. Результаты , показанные на рис. Фигура 2 стороны удаление статьи 3
После этого игроки удаления статьи 1 кромка 3 1 сторона исключения статьи
Затем удалите статью четвертую сторону, фиг. 4 исключить статью 4 стороны
И, наконец, исключение статьи 2 -х сторон. Счет равен 0. На фиг 5 второй боковой секции , чтобы удалить задание: написать программу, для любого заданного многоугольника, расчет максимально возможный балл, и может включать в себя все результаты в высокий балл перемещается край первым.
Формат ввода
POLYGON.IN файл дан, многоугольник N вершин. Файл, содержащий 2 строки: первая запись строки является значение N (N <= 50); второй ряд содержит все символы сторон (1, ..., N), приведены, и установлены в вершине между двумя сторонами значение (значение, соответствующее целому числу 1, 2 вершин одновременно подключены к стороне; второе целое число, соответствующее числу 2, 3 вершин при подключении к стороне; ...;., и т.д. Наконец, значение, соответствующее N число, в то время как номер, прикрепленный к одной стороне вершины), а значения между символами, разделенных пробелом. Есть две стороны символа: буква Т (соответствует +), буквы х (соответствующие *).
Формат вывода
В первой строке файла POLYGON.OUT, ваша программа должна вывести наибольшее количество очков во входном файле указаны условия могут получить. Если некоторые ребра удаляются в первый ход, это может привести к наивысшим баллом. Во второй строке выходного файла, такие требования включают в себя все стороны, и выход в порядке возрастания, разделенный промежуток между ними.
образец
ввод пробы
4
t -7 t 4 x 2 x 5
Пример вывода
33
1 2
Диапазон данных и советы
Ввод пробы соответствует многоугольника, показанного на фиг. Первый символ второй строки является символом номер 1 сторона.
Эта проблема были объединены Аналогично камни, превращена в полигон циклической цепи, н в 2 * N + 1 символов.
Общее число не может быть изменен, так что немного идет немного назад;
Один цикл раньше, мы решили удалить этот край плюс п, идет назад;
F [I] [J], представляет собой оптимальное решение от I до J;
Каждая точка должна состоять из двух точек, таким образом, в I, интервалы точки J Перечисление деления, внимание не равное деление точки J;
Потому что эта проблема, номера имеют как положительные, так и отрицательные, должны будут рассмотреть случай отрицательного делает положительный
Например, -1000 -1000 * 100 * 100 = 1 миллион и один миллион = 10000> 10000, но имеет менее 100 -1000;
Таким образом, каждый раз, когда слияние обязано рассмотреть минимальные и максимальные значения;
Если следующее слияние, символ «+», непосредственно добавляя максимальные и минимальные значения;
Если «*», то это будет большим * большим * немного большим, маленькое * большое и маленьким * Сравнение четырех немного, глядя на максимальный и минимальный;
код
#include <iostream> #include <cstdio> #include <cstdlib> #include <CString> #include <алгоритм> с помощью пространства имен STD; INT п, шу [ 150 ], F [ 150 ] [ 150 ] [ 3 ], сумма [ 150 ] [ 150 ], FF [ 150 ] = { 0 }, MA, MB, а, б, в, г; символ фу [ 150 ]; INT основных () { CIN >> п; для ( INT I = 1 ; г <= п; я ++ ) { CIN >> фу [я] >> шу [я]; // 先输入符号,在输入数字 } для ( INT I = п + 1 ; г <= 2 * п; я ++ ) { шу [I] = шу [i - п]; фу [I] = фу [i - п]; } Для ( INT I = 1 ; г <= п; я ++ ) { для ( INT о = 1 ; о <= 2 * п; о ++ ) { для ( Int р = 1 ; р <= 2п- *; Р ++ ) { F [O] , [Р] [ . 1 ] = - 9999999 ; // найти большое значение, минимальное инициализацию F [O] [P] [ 2 ] = 9999999 ; // найти небольшое значение, инициализация максимума } } для ( INT Q = 1. , Q <= 2 * н-, Q ++) // инициализация раздела ДП { F [Q] [Q] [ 1. =] Шу [Q]; F [Q] [Q] [ 2 ] = Шу [Q]; ЕСЛИ (ФУ [Q + . 1 ] == ' Т ') { F [Q] [д + 1 ] [ 1 ] = шу [Q] + шу [д + 1 ]; F [Q] [д + 1 ] [ 2 ] = шу [Q] + шу [д + 1 ]; } Если (фу [д + 1 ] == ' х ' ) { F [Q] [д + 1 ] [ 1 ] = шу [Q] * шу [д + 1 ]; F [Q] [д + 1 ] [ 2 ] = шу [Q] * шу [д + 1 ]; } } для( Int L = 2 , L <= п, L ++ ) { для ( Int J = I, J <= I + NL; j ++ ) { INT K = J + L - 1. , Для ( INT X = J, X <К , X ++) // должно быть меньше , чем к, потому что х + 1 сзади; { ЕСЛИ (ФУ [X + 1. ] == ' Т ' && Р [J] , [К] [ 1. <Р [J] , [Х] [] 1. ] + Ж [Х + . 1 ] [K] [ . 1 ]) F [J] , [К] [ . 1 ] = Р [J] , [Х] [ . 1 ] + Ж [Х + . 1] [к] [ 1 ]; если (фу [х + 1 ] == ' т ' && F [J] [K] [ 2 ]> F [J] [х] [ 2 ] + ж [х + 1 ] [к] [ 2 ]) П [J] [к] [ 2 ] = F [J] [х] [ 2 ] + ж [х + 1 ] [к] [ 2 ]; если (фу [х + 1 ] == ' х ' ) { = F [J] [х] [ 1 ] * е [х + 1 ] [к] [ 1 ]; б = F [J] [х] [2 ] * е [х + 1 ] [к] [ 1 ]; с = F [J] [х] [ 1 ] * е [х + 1 ] [к] [ 2 ]; d = F [J] [х] [ 2 ] * е [х + 1 ] [к] [ 2 ]; F [J] [K] [ 1 ] = макс (макс (макс (а, б), не более (в, г)), F [J] [K] [ 1 ]); F [J] [K] [ 2 ] = мин (мин (мин (а, б), мин (в, г)), F [J] [K] [ 2 ]); } } } } И далее [I] = F [г] [г + п-1] [ 1 ]; } Ма = - 1000000 ; для ( INT I = 1 ; г <= п; я ++) // 寻找最大值 { если (ма < далее [я]) { ма = FF [I]; Мб = я; } } СоиЬ << ма << епсИ; для ( INT I = 1 ; г <= п; я ++ ) { если (Н [я] == ма) { соиЬ << I <<" " ; // выход может быть выключен несколько первых } } } / * 4 120. Х Х 2 Х 4. 3. 1 х 2. 5. 4. 3 6 10000. X X -10 -10 -10 · 10 Т 10 Т 10 Т. 6 7 300000. х -10 х -10 х -10 х -10 т 10 т 10 т 10 5 или более три набора тестовых данных * /