SP1700のTRSTAGE - 駅馬車で旅します

ポータル:https://www.luogu.org/problem/SP1700

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  int型N、M、P、S、Z。
4  int型 T [ 100 ]。
5  int型 PLAT [ 100 ] [ 100 ]。
6  二重 DP [ 100 ] [ 1 << 10 ]。
7  INT メイン()
 8  {
 9      ながら(scanf関数(" %D%D%D%D%D "、&​​N、&M、&P&S&Z)!= EOF)
 10      {
 11          かの(M個の== 0&& N == 0ブレーク12          のmemset(PLAT、0はsizeof (PLAT))。
13          のためには、int型、I = 0 ; I <= M; iは++ 14              充填(DP [I]、DP [I] +(1 << N)+ 10x3f3f3f3f )。
15          のためには、int型、I = 0のscanf(; iがn <Iが++)" は%d "、&T [I])。
16          のためにint型 I = 0 ; iがpは<Iは++ 17          {
 18             INT X、Y、V;
 19              scanfの(" %D%D%D "、およびX&Y、&V);
 20である              のPlat [X] [Y] = Platの[Y] [X]は= Vを、
 21である         }
 22は          DP [S] [(1 - << N-)1 ] = 0 ; //最初のポイントを、チケットが0で表現されることなく、無駄な表す
 23である         ためint型 I =(1 << N - ) - 1 ; I> = 0 ; I - )//列挙チケット使用状態
 24          {
 25              のためにINT U = 1 ; U <= M; U ++ )//列挙原点
 26              {
27                  のためにINT J = 0 ; J <N-、J ++は)//列挙は、チケット使用
 28                  {
 29                      IF(I&(1 << J))を使用していないチケット場合//
 30                      {
 31である                         ためINT V = 1 ; V <= M; V ++ )//列挙エンド
 32                          {
 33は                             IF (Platの[U] [V])//アクセス場合
 34である                             {
 35                                  DP [V] [I&〜(1 << J)]分=(DP [V] [I&〜(1 << J)]、DP [U] [I] +(ダブル)のPlat [U] [V] /T [J]); 
                      10001が実行される//、それは01110〜なり、I&〜(1 << j)がチケットをマークするために使用して
36 } 37 } 38である } 39 } 40 } 41れる } 42が ダブル ANS = 0x3f3f3f3f ; 43である ためint型 I = 0 ; Iは、(< 1。 I ++は、<<のN-))= ANS 分(ANS、DP [Z] [I]); 44は、 IF(ANS == 0x3f3f3f3f)COUT << " 不可 << てendl; 45 のprintf(" %.3lfの\ nを" 、ANS)。 46 } 47 リターン 0 48 }

 

おすすめ

転載: www.cnblogs.com/1129-tangqiyuan/p/11616746.html