昨年、私はこの質問に良いスコアを取得$ 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 。 }