CF1033C順列ゲーム

タイトル説明

 

サンプル入力と出力

入力#1

8 
3  6  5  4  2  7  1  8

出力#1

BAAAABAB

入力#2

15 
3  11  2  5  10  9  7  13  15  8  4  12  6  1  14

出力#2

ABAAAABBBAABAAB

データ範囲

1 <= N <= 1e5,1 <= <愛= N

問題解決のためのアイデア

暴力:少し、形而上学の複雑さ

正解:

大物は逆トポロジカルソート図+によって構築されています

こんにゃくFucaiだけDFS

ACコード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
CONSTの INT N = 1E6 + 10 
LL B [N]、VIS [N]、DEP [N]、NUM [N]、[N]、T、N、M、K、X、Y。
INT DP [N] [ 3 ]。
チャー V [ 1005 ] [ 1005 ]。
INT DFS(int型のx、int型NUM){
     場合(DP [X] [NUM%2 ] =! - 1戻り DP [X] [NUM%で2 ]。
    { 
        DP [X] [NUM2 ] =(NUMの%2 == 0)?01 int型は、 DID = 0を以下のためにint型 I = 1 ;; I ++ ){
             int型 L = XI * [X]、R = X + i *が[X]。
            場合(L> = 1 && [L]> [X]){
                 場合(NUMの%2 == 0)DP [X] [NUM%で2 ] = MAX(DP [X] [NUM%2 ]、DFS( L、NUM + 1))、DID = 1  DP [X] [NUM%で2=分(DP [X] [NUM%2 ]、DFS(L、NUM + 1))、DID = 1 
            } 
            場合(R <= N && [R]> [X]){
                 場合(NUM%2 == 0)DP [X] [NUM%で2 ] = MAX(DP [X] [NUM%で2 ]、DFS( R、NUM + 1))、DID = 1  DP [X] [NUM%で2 ] =分(DP [X] [NUM%2 ]、DFS(R、NUM + 1))、DID = 1 
            } 
            場合(L < 1つの && R> N)、ブレーク
        } 
        もし(!){た
             戻り DPを[X] [NUM%2 ] = NUM%2 
        } 
    } 
    戻り DP [X] [NUM%で2 ]。
} 
int型のmain(){ 
    CIN >> N。
    以下のためにint型 i = 1 ; iが<= N; iは++ ){ 
        CIN >> [I]。
        DP [I] [ 0 ] = DP [I] [ 1 ] = - 1 
    } 
    のためのint型 i = 1 ; iが<= N; iが++ ){
         場合(DFS(I、0))COUT << " A " 他の裁判所未満<< B 
    } 
} 
/ * 
15 
3 11 2 5 10 9 7 13 15 8 4 12 6 1 14 
* /

 

おすすめ

転載: www.cnblogs.com/Larry-Zero/p/11763622.html