luogu P3959(2017noipTG D2T2

luogu P3959(2017noipTG D2T2

多くの質問に会った二日間は、偽装マップをDPなぜ、私は知らない、とこの道はあります。

最短40分、データが実際= 12は、圧力DPように見られる<Nの範囲であり得ます。

解決:

問題は、接続方法を見つけることを意図しており、通信ポイントの同じブロックにおける最小コストこと。

N <= 12は、そうDFS + DP状の圧力を行います。

詳しくはノートを参照してください。

AC码:

書式#include <cstdioを>
書式#include <CStringの>
書式#include <アルゴリズム>
名前空間stdを使用。

整数N、M、CNT、OUT [15]、K、ANS = 1E9 + 7、E [15] [15]、DP [15] [15] [1 << 15]。
// DP [X] [D] [s]は点xの最小の総コストは、セットSの深さdであります
//目標状態CNT ==(1個の<< N)-1
// OUT [i]は層の数であります 


空の仕事(int型のx、int型の合計、int型の深いです)
{
	//転送方程式DP [X] [深い] [1 <<(X-1)] =分(DP [X] [深い] [1 <<(X-1)]、和+アウト[I] * E [i]は[J]) 
	//合計は、DPの層は、深い層に、xは現在のコレクションであるときに最適なソリューションです。 
	もし(合計> = ANS)のリターン; //剪定 
	もし(X == CNT) 
	{
		ANS = I;
		リターン;
	}
	(I ++; I <= N I = 1の整数)のために
	{
		もし((1 <<(I-1)&X)!)続けます。
		用(INT J = 1; J <= N; J ++)
		{
			(もし!((1 <<(J-1))&X)&& E [i]の[j]の<1E9 + 7)
			{
				もし(DP [J] [深い+ 1] [1 <<(J-1)| X] <=合計+アウト[I] * E [i]は[J])続けます。
				DP [J] [深い+ 1] [1 <<(J-1)| X] =合計+アウト[I] * E [i]の[j]は、
				アウト[j]は、[i]は1アウト=。
				作業(1 <<(j-1)| X、DP [J] [深い+ 1] [1 <<(j-1)| X]、深い+ 1)。
			}
		}
	}
}

メインint型()
{
	scanf関数( "%D%D"、&N、&M)。
	CNT =(1 << N)-1。
	memsetの(E、0x3fを、はsizeof(E))。
	しばらく(M--)
	{
		Uをint型、V、W;
		scanf関数( "%D%D%D"、&U&V、およびW)
		E [U] [V] = E [V] [U] =分(E [U] [V]、W)。
//追加(U、V、W);アドオン(V、U、W)。
//で[U] ++;で[V] ++;
//アウト[U] ++;アウト[V] ++;
//もし(アウトアウト[U]> [V] &&アウト[U]> OUT [maxu])maxu = U。
//もし(OUT [V]> OUT [U] && OUT [V]> OUT [maxu])maxu = V。
// MAXOUT = MAX(MAXOUT、MAX(OUT [U]、[V]アウト))。
	}
	(I ++; I <= N I = 1の整数)のために
	{
		memsetの(アウト、0、はsizeof(OUT))。
		memsetの(DP、0x3fを、はsizeof(DP))。
		OUT [I] = 1。
		//初期化 
		作業(1 <<(I-1)、0,0)。 
	}
	printf( "%dの\ n" は、ANS)。
	0を返します。
 } 

 

DP-のようなプレスレビュー:

個人的に私は、最も重要なことのような圧力ビットコンピューティングは、圧力が通常の場合のようなバイナリ圧縮(だと思い聞いた三元、あまりにもあまりない食品)

ビット算術演算のマップが(オンラインで見つけます

 

ブログ、に非常に感謝し___New2zy___dalao リンクされています

その後、圧力DPの形式の方法を選択。(個人的な経験を言うように

選択された選挙か、勝つか負ける:Nは、通常、一般的に、各点(ステップ)のための2つのケースが存在する、64超えません。

自然の残りの部分と一般的なDPと同様に(無後効果、最適ステージ)

おすすめ

転載: www.cnblogs.com/plzplz/p/11816253.html