NOIP2017 D2T3の問題解決

フェイス質問

そのようなデータ範囲がされていないいじりされDFSをいじり成形圧力DPを

まず、AとBは、のいずれかで決定されるべきです。

放物線のいずれか2つだけのブタを用いて決定することができる、我々は、[I] [J] N ^ 2を列挙し、この豚の放物線のブタは、ステート状態に堆積されます。

次に列挙任意の二つのブタI、Jを排除しない; F [I |状態[J] [K] =分(F [I |状態[J] [K]、[I] +1 fは);

唯一のための個々のブタの一部は、除去するようにした:F [I |(1 << J-1)] =分(F [I |(1 << J-1)]、F [i]を+1)。

それからちょうど罰金:

 

#include <ビット/ STDC ++ H> 
の#define EPS 1E-7 
の#define INC(I、B)(iは= intを登録私は++; iが= Bを<)のための
名前空間stdを使用。
構造体ノード{ 
	ダブルX。
	ダブルY; 
}ブタ[20]。
[1000010] F INT。
int型BO [21]。
N INT、M。
INT作業(INT PIG1、INT pig2)
{ 
	IF(豚[PIG1] .X ==豚[pig2] .X)戻り0; 
	ダブルX1 =豚[PIG1] .X、X 2 =豚[pig2] .X、Y 1 =豚[PIG1] .Y、Y 2 =豚[pig2] .Y。
	ダブルtmpx =×1 *×1 * X2-X2の*×2 *×1、tmpy = Y1 * X2-Y2の*×1。
	ダブル= tmpy / tmpx、B =(Y1-*×1 *×1)/ X1。
	IF(A> = 0)戻り0; 
	int型のres = 0; BO [PIG1] = BO [pig2] = 1。
	INC(I、1、N){ 
        二重X =豚[I] .X、Y =豚[I] .Y。
        IF(ファブ(A * X * X + B * X-Y)<EPS)RES | = 1 <<(I-1)、F [1 <<(I-1)] = F [RES] = 1。
            }
    }
    解像度を返します。
} 
INT状態[110] [110]。
INTのmain()
{ 
	int型のT。
	cinを>>トン。
	一方、(T - ){ 
		memsetの(F、0x3fを、はsizeof(F))。
		memsetの(状態、0、はsizeof(状態))。
		memset(BO、0、はsizeof(BO))。
		scanf関数( "%d個の%のD"、&N、&M)。
		INC(I、1、N)のscanf( "%のLFの%のLF"、&豚[I] .X、&豚[I]・Y)、F [1 << I-1] = 1。
		INC(I、1、N)INC(j、1、I-1)状態[I] [J] =仕事(i、j)は、
		INC(I、1、(1個の<< N)-1)INC(j、1、N){ 
			IF((I >> J-1)・1 == 1)続けます。
			INC(K、1、J-1){ 
               IF(I&(1 << K-1)== 1)続けます。
               F [I |状態[J] [K] =分(F | [I] +1 F [I状態[J] [K])。
            F [I |(1 << J-1)] =分(F [I |(1 << J-1)]、F [i]を+1)。
	} 
}

 

おすすめ

転載: www.cnblogs.com/kamimxr/p/11728564.html