問題レポートへのモバイル・サービス・ソリューション

トピックポータル

[タイトル]効果

L-位置(1〜L番号)とN要件、それぞれ三のスタッフ1,2,3位置、P [I]を得るために必要なそれぞれの位置の初期状態では、位置は、ウェイターに行く必要がありますそれは、iがjのコストを配置する位置から知られている最小コストを見つけ、C [I] [J]です。

[解析]アイデア

我々は、F [i]は、[X] [Y]は、[z]は、前の請求項のi番目の完了三の最小コスト付随それぞれx、y、zの位置を示します。その後、我々は、ウェイターはi番目によって必要とされる位置になければならない場合、すなわち、Z = P [i]は、それが一次元アレイで除去することができる、ことを見出しました。

次に、伝達方程式を見て、I + 1最初の要件のために、3例があり、すなわち、位置Pまでウェイターへのx、y座標[I + 1]が、それによって得られるP [I]を、ましょう。

$ [I + 1] [X] [Y] =分(F [I + 1] [X] [Y] F(X!= P [I + 1]且Y!= P [I + 1])であれば、F [i]は、[X] [Y] + C [P [I] [P [I + 1]])$

$ IF(P [I]!= Pの[I + 1]且Y!= P [I + 1])F [I + 1] [P [I] [Y] =分(F [I + 1] [I] [X] [Y] + C [X] [P [I + 1]])$ F [P [I] [Y]、

$ [I + 1] [X] [P [I] [I + 1] F =分(F(X!= P [I + 1]且P [I]!= P [I + 1])であれば[X] [P [I]、F [i]が[X] [Y] + C [Y] [Pの[I + 1]])$

伝達方程式を観察することによって、私たちは、あなたがコードに詳述された空間の爆発を防止するには、スクロール配列を使用することができますので、すべての状態は唯一、その前の状態に関係していることがわかります。

[]コードの実装

 

1の#include <cstdioを>
 2の#include <CStringの>
 3の#include <アルゴリズム>
 4  の#define RGレジスタ
 5  の#defineゴー(I、B)(RG iは= int型、iが= Bを<; I ++の)のための
 6  使用して 名前空間はstdを、
7  INT T、L、N、C [ 202 ] [ 202 ]、p個の[ 1002 ]。
8  int型 F [ 2 ] [ 202 ] [ 202 ]。
9つの int型のANS;
10  のconst  int型 MAXN = 1E9 + 7 11  INT メイン(){
12      のscanf(" %dの"、&T)。
13      INT X、Y。
14      一方(T-- ){
 15の          ANS = 1 << 30 16          のscanf(" %D%dの"、&​​L、&N)
17          ゴー(I、1、L)に行く(j、1、L)のscanf(" %dの"、&C [I] [J])。
18          ゴー(I、1、N)のscanf(" %dの"、&P [I])。
19          のmemset(F、0x3Fはsizeof (F))、
 20は          F [ 0 ] [ 1 ] [ 2 ] = 0 ; P [ 0 ] = 3 ;
 21は、          移動(K、0、N- 1 ){
 22は              = A ^ 1。 ; // XORによって実装スクロールアレイ
23で              のmemset(F [A] は0x3Fはsizeof(Fは、[A])); // の初期値を更新することを忘れない
24              X = P [K]、Y = P [K + 1 ];
 25              ゴー( I、1、L)ゴー(J、1 、L){
26                  あれば(私== j)は継続します27                  なら(I!= Y && J!= Y)F [A] [I]、[J] =分(F [A] [I]、[J]、F [A ^ 1 ] [I] [J] + Cの[ X] [Y])。
28                  であれば、[A] [X] [J] =分(F [A] [X] [j]は、[A ^ F F(X!= Y && J!= Y)1 ] [I] [J] + [C I] [Y])。
29                  もし [I] [X]、[A ^ F(I!= Y && X!= Y)[A] F [i]が[X] =分(F [A] 1 [I] [J] +] C [ J] [Y])。
30              }
 31          }
 32          ゴー(I、1、L)に行く(j、1 、L)
 33              であれば(私!= jの&& I] = P [N] && J!= P [N])
 34                  ANS =分(ANS、F [A] [I] [J])。
35          のprintf(" %d個の\ n " 、ANS)。
36      }
 37      リターン 0 38 }
コードはここで突きます

 

おすすめ

転載: www.cnblogs.com/THWZF/p/10991002.html
おすすめ