それほど遅いような圧力に???
それの何の問題紫色の質問の難易度が存在しないと言って、そのデータはまた、水であります
データサイズを見て、N≤12 N- ≤ 1 2、決定的状圧力。
次に列挙する開始点、配置されたDP D Pステート:
F [I] [J] = iのjへの最小コスト状態を起点として
前記J Jはバイナリ数(小数として表される)であり、私は私は少し。1 1 0 0は、それぞれ第1達したかどうかI Iは、点(1つの。1意味に達した、0 0手段が到達していません)
(以来M 大M、N- 、N-小さい、複数のエッジ、隣接行列(が存在するであろうE [U] [V] E [ U ] [ V ]))
状態遷移方程式を挙げることができます。
F [I] [J] =分{F [i]が[K] +ディス[I] [K] [U] * E [U] [V]} (J&(1 <<(U-1))! = 0、J&(1 <<(V-1))!= 0、I!= V、K = J ^(1 <<(V-1))、E [U] [V]!= 1E9)
(E [U] [V]!= 1E9 E [ U ] [ V ] != 1 E 。9言われているU U、VはVと縁取ら)
これは何を意味するのでしょうか?我々は状態(見つけることk個の現在の状態(以下K)jはj)は、わずか数点(当然の出発点にすることはできません)、そしてからのk kにJ の全てで、Jを拡大するk個のkの最も安価な種類をとり、 。
しかし、問題があり、数え方の側面を取りますか?
主題の説明は、それが乗じ辺の長さに出発点であり、uはuが(経過ポイントDIS [I] [J] [U] D I S [ I ] [ J ] [ U ])にします。
問題再び、DIS [i]は[J] [U] D I S [ I ] [ J ] [ U ]どのようにカウントしますか?
道の状態遷移をそらすたびに
コードは以下の通りであります:
#include <cstdioを> インラインINT読み出す(){ int型、R = 0、F = 1。 チャーC = GETCHAR()。 一方、(C < '0' || C> '9'){IF(C == ' - ')は、f = -1; C = GETCHAR();} 一方(> = '0' && C <= '9 C ')R =(R << 1)+(R << 3)+ C-'0'、C = GETCHAR()。 R * Fを返します。 } int型N、ANS = 1E9、M、F [15] [5005]、E [15] [15]、DIS [15] [5005] [15]。 インラインINT分(INT A、INT B){ ?<B戻り:Bと、 } int型のmain(){ freopenは( "treasure.in"、 "R"、STDIN)。 freopenは( "treasure.out"、 "W"、STDOUT)。 N = read()は、M = read()は、 以下のために(INT i = 1; iが<= N; I ++) のための(INT J = 1; J <= N; J ++) E [I] [J] = 1E9は、 以下のために(INT I = 1; I <= M。 私は++){ int型、U = read()は、V =)は(読み取り、 IF(UV)E [U] [V] = E [V] [U] =分(E [U] [V])(リード)。 } 以下のために(INT i = 1; iが<= N; I ++) のための(INT J = 1、J <1 << Nであり; J ++) F [i]は[J] = 1E9。 以下のために(INT i = 1; iは= N <; iは++){ F [i]が[1 <<(I-1)] = 0; DIS [I] [1 <<(I-1)] [I] = 1。 {(; J <1 << N J ++ INT J =(1 <<(I-1))+ 1)についての 場合(!(J&(1 <<(I-1))))続けます。 int型のx = J、U = 1; 一方、(X){ {IF(X&1) (int型V = 1; V <=はN; V ++)のために{ !IF(I == V || E [U] [V] == 1E9 ||(J&(1 <<(V-1))))続けます。 INT K = J ^(1 <<(V-1))。 もし{([I] [K] + DIS [I] [K] [U] * E [U] [V] F [I] [J]> F) [i] [j]はFを= F [i]を[K] + DIS [I] [K] [U] * E [U] [V]。 用(INT y = 1であり; y <= N; Y ++)DIS [I] [J] [Y] = DIS [I] [K] [Y]。 DIS [I] [J] [V] = DIS [I] [K] [U] +1。 X >> = 1。 } } ANS =分(ANS、F [i]が[(1 << N)-1])。 } のprintf( "%dの"、ANS)。 0を返します。 }