P2672のセールスマン(続きます)

P2672のセールスマン

問題の解決策

 衝撃を受けた感嘆符エクスクラメーション感嘆符

貪欲な大胆な推測はしてもACにつながります!

皮膚は感謝SY&LZ、オンラインモッズここで、この質問の考え方について話し始めたではありません

 

まず、私たちが考えるとき、X = 1の場合、ANSは最大Siが2 +愛*です(1 <= iの= N <)

そして、それを行う方法

---- ----継続するには

 

 

コード

#include <ビット/ STDC ++ H> 使用して名前空間STDを、const int型 MAXN = 1E5 + 10 INTのN、K、乗りました。長い長い ANS = 0 ; 構造体ノード
{ int型の、DT。
} PEO [MAXN]。BOOL CMP(ノードX、ノードY)
{ 戻り XA> YA。
} int型のmain()
{ 
    scanf関数(" %Dを\ n "、&N)
    もし(N == 1 
    { int型のX、Y。
        scanf関数("

 

 

 


    


    


        %D \ n "X * 2 + Y);
         戻り 0 ; 
    } 
    ためのint型 i = 1 ; iが<= N; iが++ 
      のscanf(" %dの、およびPEO [I] .S)
     のためのINT i = 1 ; iは= <N; iは++ 
    { 
        scanf関数(" %のD "、およびPEO [I] .A); 
        PEO [I] .DT =のPEO [I] .S * 2 + PEO [I] .A ;
         もし(PEO [I] .DT> ANS)
        { 
            ANS= PEO [I] .DT。
            kは = I。
        } 
    } 
    のprintf(" %のLDを\ n " 、ANS)。
    乗っ =のPEO [K] .Sと、
    PEO [K] .A = - 1 
    ソート(PEO + 1、PEO + N + 1 、CMP)。
    
    以下のためにint型 i = 1 ; iがN <、iは++ 
    { 
        場合(PEO [I] .S <= RODE)
        { 
            ANS + = PEO [I] .A。
            printf(" %LDを\ n " 、ANS)。
        } 
        エルス
        {  + = PEO [I] .A。 - RODE = * 2  + = PEO [i]は.S * 2 
            乗っ =のPEO [I] .S。
            printf(" %ldは\ nを" 、年); 
        } 
    } 
    
    戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/xiaoyezi-wink/p/11121926.html