[1108] Ло Valley дешево купить

Название Описание

«Дешево купить» Эту рекомендацию половины успеха правил на фондовом рынке в молочных коров. Для того, чтобы считать большой инвестор, вы должны следовать следующим советам вопрос: «купить дешево, дешево купить снова.» Каждый раз , когда вы покупаете акции, вы должны использовать меньше , чем в прошлый раз , когда вы покупаете его цену , чтобы купить его. Количество покупки, тем лучше! Ваша цель состоит в том, чтобы следовать приведенным выше рекомендациям при предпосылке ищет , сколько раз вы можете приобрести запасы. Вам будет предоставлена цена продажи акций (в день в течение периода времени 2 ^ {16} 2 . 1 положительное целое число в диапазоне от 6), вы можете выбрать , в какие дни позже на складе. Каждая покупка должна следовать «купить дешево, а затем купить недорогой» принцип. Напишите программу , которая вычисляет максимальное количество покупок.

Вот список цены акции:

Дата  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 , 1 1 , 1 2

Цена 68, 69, 54, 64, 68, 64, 70, 67, 78, 62, 98, 87 . 6 . 8 , . 6 . 9 , . 5 . 4 , . 6 . 4 , . 6 . 8 , . 6 . 4 , . 7 0 , . 6 . 7 , . 7 . 8 , . 6 2 , . 9 . 8 , . 8 . 7

Лучшие инвесторы могут приобрести до 4 четыре акции, один возможный сценарий:

Дата  2, 5, 6, 10 2 , 5 , 6 , . 1 0

Цена  69, 68, 64 и 62 . 6 . 9 , . 6 . 8 , . 6 . 4 , 6 . 2

Формат ввода

Строка 1:  N (1 \ Le N \ Le 5000) N ( 1 N 5 0 0 0 ), количество дней акции выпуска

Строка 2:  N число N, ежедневно цена акции.

Формат вывода

Два числа:
максимальное количество покупок и покупка имеет самое большое количество программы ( \ Le ^ {2} 31 2 3. 1.) , Когда два вида программ «выглядит так же» время (то есть по той же цене , когда они образуют очередь) это 2 два вида программ считаются тем же самым.

Пример ввода и вывода

Input # 1
12
68 69 54 64 68 64 70 67 78 62 98 87
Выход # 1
4 2

 

Решение: от Лос-Вэлли, Супер (синий) из заголовка DP

# include <бит / STDC ++ ч.>
 с использованием  пространства имен STD;
Const  INT maxn = 5005 ;
Int п, а [maxn];
INT дп [maxn];
INT F [maxn];
Int основных () {
  IOS :: sync_with_stdio ( ложь ), cin.tie ( 0 ), cout.tie ( 0 );
  CIN >> п;
  для ( INT I = 1 ; г <= п; я ++ )
    CIN >> а [я];
  INT ANS1 = 0 , ans2 = 0 ;
  для ( INT I = 1 ; г <= п; я ++ ) {
    дп [I] = 1 ;
    для ( INT J = 1 , J <я; j ++ )
       , если (а [я] < а [J]) {
        дп [I] = макс (дп [I], дп [J] + 1 );
      }
    ANS1 = макс (ANS1, дп [I]);
  }
  для ( INT I = 1 ; г <= п; я ++ ) {
     если (дп [я] == 1 ) П [г] = 1 ;
    для ( INT J = 1 , J <я; j ++ )
       , если (дп [я] == дп [J] + 1 && а [я] <а [J]) F [I] + = F [J];
      остальное ,  если (дп [я] == дп [J] && а [я] == а [J]) П [I] = 0 ;
    если (дп [я] == ANS1) ans2 + = F [I];
  }
  соиЬ << ANS1 << "  " << ans2 << епсИ;
}

 

рекомендация

отwww.cnblogs.com/wuhu-JJJ/p/11801905.html