スパイのUVA市

溶液

この状態は、との良好な質問、希望F [i]の[j]を表現するためにj番目のi番目の第2のステーションどのくらいの時間、少なくとも、前中のi、j番目の第二ステーションを、車かどうかのデータがあってもよいことに注意してくださいそれはなり超えるために注意を払うために、Tをクリアされます

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONSTの INT N = 55 int型 T [N]、HT [ 10005 ] [N] [ 2 [F]、CNT、K、N、T、M1、10005 ] [N]。
INT メイン(){ 
    freopenは(" a.in "" R " 、STDIN)。
    一方、(scanf関数(" %のD "、&​​N)== 1個の && N){ 
        scanf関数(" %のD "、&T)。
        memsetの(HT、0はsizeof(HT))。
        memset(T、0はsizeof (T)); //清零
         ためint型 i = 1 ; iがN <; I ++)はscanf関数(" %のD "、およびT [I])。
        int型の合計。
        scanf関数(" %のD "、&M1)。
        以下のためにint型 I = 1 ; I <= M 1; iは++ ){ 
          scanf関数(" %のD "、および合計)。
          INT J = 1 ; J <= N; J ++ 
           HT [和] [j] [ 0] = 1、合計+ = T [J]; //正向不变
        } 
        のscanf(" %dの"、&M1)。
        以下のためにint型 I = 1 ; I <= M 1; iは++ ){ 
          scanf関数(" %のD "、および合計)。
          以下のためにINT ; J> = J = N 1 ; j-- 
           HT [和] [J] [ 1 ] = 1、合計+ = T [J- 1 ]; //记住-1 
        } 
        のためにint型のI = 1 ; iがN <; I ++)は[T] [I] = F 0x3f3f3f3f
        F [T] [N] = 0 ;
        以下のためにint型のI = T- 1 ; I> = 0 ; i-- のためのint型 J = 1 ; J <= nであり、j ++ ){ 
             F [I] [J] = F [iが+ 1 ] [J] + 1 ;
             もし(J <N && HTは、[I]は[j]は[ 0 ] && iがT [j]は<= + T)
              Fを[I]は[j]は(分= F [I] [J]、[私はTを+ F [J] ] [J + 1 ])。
             もし(J> 1つの && HT [I] [J] [ 1 ] && iがTを+ [J- 1 ] <= T)
              F [I] [J]=分(F [I] [J]、F [iが+ T [J- 1 ]] [J- 1 ])。
         } 
        のprintf(" ケース番号%D:"、++ CNT)。
        もし(F [ 0 ] [ 1 ]> = 0x3f3f3f3f)プット(" 不可能" ); // 0x3fを挂了
         のprintf(" %Dを\ n " F [ 0 ] [ 1 ])。
    } 
}

 

おすすめ

転載: www.cnblogs.com/coder-cjh/p/11409809.html