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 ; }