ハミルトンACwing91最短経路形圧力DP

URL:https://www.acwing.com/problem/content/93/

ソリューション:

圧力のような暴力列挙アップデート後。$ Dpを[I] [J] $ $ I $位置1に2進数を表す点の位置が通過可能であり、$ jの$は現在のポイントです。伝達方程式は、$ DP [I] [J] =分である(DP [I]、[J]、DP [K] + DIS [K] [j] [iがoplus(1 << J)\])ここで、$を$ iがoplus(1 << J)$ $ I $ $ J $のバイナリ状態は、エッジを削除、すなわち状態から直接側から$ K $ $ $ J緩和に$ $ Jに接続されていない、そして最終的には\しますだけうまく列挙したものの側を決定。あなたが圧力を好きではない場合、それはTLE $を$ます。

ACコード:

#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
INT MP [20] [20]。
[1 << 20] [20] F INT。
INT解く(int型N)
{ 
	memsetの(F、0x3f3f3f3f、はsizeof(F))。
	F [1] [0] = 0。
	(; I <(1 << N)++ I I = 1 INT)のため
		のために(++ J INT J = 0; J <N)
			IF((I >> J)&1)
				(INT kに対して= 0; K <N; ++ K)
					IF(((I ^(1 << J))>> K)&1)
						F [I] [J] =分(F [I] [J]、F [I ^(1 << J)] [K] + MP [K] [J])。
	Fリターン[(1個の<< N) - 1] [N - 1]。
} 
メインINT()
{ 
	int型のn; 
	scanf関数( "%のD"、&N); 
	(; iがN <++ iが0 = INT)のための
		(INT J = 0であり、j <N; ++ j)のため 
			のscanf(」
	printf( "%d個の\ n"(n)を解きます)。
}

  

 

おすすめ

転載: www.cnblogs.com/Aya-Uchida/p/11470582.html