$ Noip2018 / Luogu5020 $通貨の$のDP $

$ Luogu $

 

昨年、私はこの質問に良いスコアを取得$ 20 $ $ OVO .......... $

 

$ソル$

ペアは現在、実際に限り、それができるように、他の数が十分に取り除かの数を示し、ことを非常に明確に見えます。

$ F [i]は$ $ I $は他の番号の数で表されているかどうかを示す。辛いのような完全なバックパックが、異なる一つのことは、[i]は$を表現することができ、他のいくつかではない表現することができる能力である$ Fということです累積答えかどうか[i]は$ $ 1 $ [i]は$ [i]は$チェック$ fに大規模な、最も外側のループに小さな$ $置きます。

 

$コード$

 

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <CStringの> 
の#include <キュー> 
の#include <アルゴリズム>
 に#define ILインライン
 の#define Rgを登録し
 ます。#define行く(I、A、B)は(RG int型I = A ; iが<= Bと、++ I)
 の#defineはい(I、B)のための(RG INT iは=; I> = B; - I)
 の#define MEM(B)のmemset(B 、はsizeof(A))
 の#defineっ長い長
 の#define DB二重
 の#define INF 2147483647
 使用 名前空間STDを、
ILのINTのリード()
{ 
    たRG INT X = 0、Y =1 ; チャー C = GETCHAR()。
    一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')Y = - 1 ; C = GETCHAR();}
     一方、(C> = ' 0 ' && C <= ' 9 '){X =(X << 1)+(X << 3)+ C- ' 0 ' ; C = GETCHAR();}
     戻りのx *のY。
} 
int型 T、N、MS、など];
ブール F [ 25010 ]。
INT メイン()
{ 
    T = リード()。
    一方、(T-- 
    { 
        N)=(読み取り(I、行く1 [I] =、n)を読み出します(); 
        ソート(A + 1、+ N + 1 )。
        MS = [N]。など = 0 ; MEM(F、0 ); 
        行く(I、1 、N)
        { 
            場合(F [I])続けます++、F [I] = 1 
            (J [i]は、ミリ秒)に行くもし(F [JA [I])F [J] = 1 
        } 
        のprintf(" %Dを\ n "など)。
    } 
    戻り 0 
}
コードの表示

 

 

 

おすすめ

転載: www.cnblogs.com/forward777/p/11402833.html