A - 無料DIYツアーHDU - 1224

タイトル効果:各々は、特定の魅力値は、次いで、得られる1からn + 1から、この魅力的な図によれば、最大値、および出力パス(必要数が小柄でしか存在し、有向グラフあります都市への都市のより多く)。

ソリューション:それは最短経路+レコードを考えるのは簡単です。しかし、少しやり過ぎを感じ。私の方法は、iが最大カリスマ子ノードを表し、それは、マップではなく、リングを有するツリー、WAのように1つの所与れるDFS + DP、DP [i]が起動することである......

ポジティブなソリューション:forループ2、DP [i]を最初から都市iの第二の都市への最高の状態を表しています。その後、私未満のすべての都市を列挙

状態遷移方程式DP [I] = MAX(DP [I]、DP [J] + ARR [i])と(J <I)。

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
const  int型 N = 200 ;
INTのDP [N]。
INT MP [N] [N]。
int型のn;
int型T1;
int型のプレ[N]。
INT ARR [N]。
ボイドプリント(int型X){
     もし(x == 1 ){ 
        COUT << 1 リターン; 
    } 
    (PRE [X])を印刷。
    printf(" - >%D " 、X)。
} 

無効(解決int型T){ 
    memsetの(DP、0はsizeof DP)。
    memset(MP、0はsizeof MP)。
    memsetの(前、0はsizeof PRE)。
    memsetの(ARR、0はsizeof ARR)。
    cinを >> N; 
    以下のためにINT iが= 1 ; I <= N; I ++)CIN >> ARR [I]。
    int型メートル; 
    cinを >> メートル。
    以下のためにINT iが= 1 ; I <= M; I ++ ){
         int型のX、Y。
        CIN>> X >> Y。
        MP [X] [Y] = 1 
    } 
    ためINT iが= 1 ; I <= N + 1 ; I ++ ){
         ためINT J = 1、J <I、J ++ ){
             場合(MP [j] [i]は&& DP [I] <DP [J] + ARR [I]){ 
                DP [I] = DP [J] + ARR [I]。
                事前[I] = J。
            }     
        } 
    } 
    のprintf(" CASE%d個#\ n " 、T)。
    printf(" ポイント:"); 
    COUT << DP [N + 1 ] << ENDL。
    printf(" サーキット:" ); 
    印刷(プレ[N + 1 ])。
    printf(" - > 1つの\ N " );
    もし(!T = T1)はcout << てendl; 
    
}                          
int型のmain(){ 
    
    CIN >> T1。
    以下のためにINT iが= 1 ; iが<= T1、iは++ )(i)を解きます。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/Accepting/p/12519069.html
おすすめ