[OpenJ_Bailian - 2945]迎撃ミサイル(動的プログラミング)

迎撃ミサイル


 説明:

敵のミサイル攻撃、ミサイル迎撃システムの開発から守るために国。任意の高さに到達するための最初のラウンドですが、しかし、各シェルと状況は高さを持って前よりも大きくすべきではない。しかし、そのようなミサイル迎撃システムは欠陥を持っています。ある日、敵のレーダーミサイル攻撃、ひいてはミサイル浮上量を観察し、ミサイルを迎撃するためにどのくらいのシステムアップ計算します。インターセプト入ってくるミサイルは、入ってくるミサイル攻撃の時系列順にする必要がある場合にミサイルを迎撃するために、フロント、バックミサイルを迎撃することはできません。

入力

二つの入力ラインがあり、 
最初の行の数、敵のレーダーミサイルのK(K <= 25)への入力、 
2行目は、正の整数kを入力し、kは着信ミサイル時間によってミサイル攻撃の高さを表します順序は、与えられたスペースで区切っ。
Outpu トン

インターセプトするミサイルの最大数を表す整数を含む出力のみ一行。 

サンプル入力

8

300 207 155 300 299 170 158 65

サンプル出力

6

トピックへのリンク:
https://vjudge.net/problem/OpenJ_Bailian-2945

 

一見、私はそれが最長の成長シーケンスではなかったし、その後、少し賢くを再生逆さまに番号を入力して、[実行する最長の成長プロモーター配列を押すと考え、悲劇が起こった後、私は、バグの二時間を変更しました私は皮肉に変更しましたが、それは間違っているし、最終的に再書き込み正直、ACは、崩壊した「時系列に入ってくるミサイル攻撃はその後ミサイルを迎撃するために、フロント、バックミサイルを迎撃するために許可されていませんでなければならない」ということを見つけるために!

、DPのことを考えについての話[i]は、[i]は前置された配列の長さ、状態遷移方程式に:[i]は<= [J]、そして[j]は、上記は確かに置くことができる場合は、[I] 、DP [I] = MAX(DP [I]、DP [J] +1)。

ACコード

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <fstreamの>
 4の#include <アルゴリズム>
 5の#include <cmath>
 6の#include <両端キュー>
 7の#include <ベクトル>
 8の#include <キュー>
 9# <含む文字列 >
 10の#include <CStringの>
 11の#include <地図>
 12の#include <積層>
 13の#include < 設定 >
 14  使用 名前空間STDを、
15  INT [ 50 ]。
 50 ];
 17  int型 MAXN = 0 ;
 18である INT メイン()
 19。 {
 20は     INT K;
 21である      CIN >> K;
 22である     ためINT I = 0 ;私はK <; I ++の23であるが         、{
 24              CIN >> A [I] ;
 25              DP [I] = 1 ; // [i]は、初期状態が前置されている1 
26である         }
 27      のためにINT I = 1 ; Iは、Kを<; I ++は28          のためのINT J = 0 ; J <I、J ++ 29          {
 30              IF([I] <= A [J])
 31である             {
 32                  DP [I] = MAX(DP [I]、DP [J] + 1); // 状態遷移方程式
33は                  MAXN = MAX(DP [I]、MAXN);
 34である             }
 35          }
 36      COUT MAXN << << ; ENDL
 37 }

 

 

 

 

おすすめ

転載: www.cnblogs.com/sky-stars/p/10943783.html