彗星OJ - コンテスト#6 B.二重幸福(二次元配列と最大の上昇)

ダブルハピネス

タイトル説明

 

Illyasviel:「あなたは最も長いシーケンスにそれをドロップしたくないですか?」

スターダスト:「まあ!」

Illyasviel:「ボスは、最大に、私のシーケンスの全体の2つの最長の下落を与えることはありません。」

配列は見つけ  互いに素なサブシーケンス内の2つが低下し、要素とその最大、配列は空であってもよいことはありません。

注1:のシーケンス  定義が低減されていない不在L <R&LT  及び  L > R&LT

注2:の不在:2つの互いに素のサブシーケンスは以下のように定義されている  I  も第2のサブシーケンスで、即ち、第1サブシーケンス。

 

説明を入力します。

 

番号の最初の行  のn  系列の代表的な  長さa。

次のラインの  数N  の数のI代表  I

データ範囲:

  • 2 N 5 0 0
  • 1 A iは1 0 5

 

出力説明

 

線aは要素および最大値をドロップしない2つの互いに素の配列の整数を表します。

 

サンプル入力1 

9 
5 3 2 1 4 2 1 4 6

サンプル出力1

22

プロンプト

サンプルは説明しました:

第一の配列は「5」から選択されます

第二の配列は、「3446」から選択され、

合計  2 2

 

https://cometoj.com/contest/48/problem/B

LIS 2次元変種最大互いに素シーケンスを必要と増加しました。

非常に良い質問。類似しているが、二次元、DPに拡張ここで一次元思考とLIS [I] [j]は、それぞれI、Jが最大の端部である二つの配列を表し、ダブル介してケースI、Jを列挙する。

ある微妙な性質は:i、jは列挙の場合には同じになりますが、添字jを持つkのDPあり、k =私はすなわち、2に等しくないので、ここで確実にアップデートが唯一のケースが!交差しませんシーケンスの2つの要素があります。

 

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。

INT [ 505 ]。
int型の DP [ 505 ] [ 505 ]。

INT のmain()
{ 
    int型N、M、I、J、K。
    scanf関数(" %のD "、&N)
    (i = 1 ; iが<= N; iは++ ){ 
        scanf関数(" %のD "、および[I])。
    } 
    ため(k = 1 ; kは<= nであり、k ++ ){
         ための(I =0、I <K; iは++ ){
             ため(J = 0 ; J <K、J ++ ){
                 場合([i]が<= A [K]){ 
                    DP [K] [J] = MAX(DP [K] [J]、DP [I] [J] + [K])。
                } 
                もし([J] <= [K]){ 
                    DP [I] [K] = MAX(DP [I] [K]、DP [I] [J] + [K])。
                } 
            } 
        } 
    } 
    int型 ANS = 0 (i = 1 ; iが<= N; iは++ ){
         ため(J = 1 ; J <= N; J ++){
            ANS= MAX(ANS、DP [I] [J])。
        } 
    } 
    のprintf(" %d個の\ n " 、ANS)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/yzm10/p/11105443.html