[タイトル]、[検索]ブラシ油滴拡張

矩形ブロックの家で、N(0≤N≤6)は、2つの別個の点まで、

油滴が他の国境や心のフレームに接触するまで、小さな油滴を入れていずれかの時点で、その後、液滴が拡張されていたであろう。

完成油滴を待つ必要があり、油滴の次の展開を配置することができます。次いで、油滴がそれを占有する全ての油滴の完了後に配置最大総容積を作製するために、どのような順序に従ってN個の点の上に配置すべきか?

(異なる油滴が一体化されていません)

 

書式#include <cstdioを> 
する#include <cstdlib> 
書式#include <cmath> 
の#include <アルゴリズム>
 の#defineはダブルDD 
 使って 名前空間はstdを、
int型のn; 
DDのX [ 2 ]、Y [ 2 ]、XX [ 8 ]、YY [ 8 ]。
DD、DS [ 8 ]、DIS [ 8 ] [ 8 ]。

ANS DD、NW [ 8 ]。
BOOL VIS [ 8 ]。
ボイド DFS(int型CNT、DD合計)
{ 
    場合(CNT == N)
    { 
        ANS= MAX(ANS、合計)。
        返します
    } 
    
    のためにint型 i = 1 ; iがn = <; iは++ 
    { 
        場合(VIS [i])と続けます
        
        VIS [i]は = ; 
        DDのR = DS [i]は、
        INT J = 1 ; J <= nであり、j ++ 
        { 
            場合(I == j)は続けますもし(VIS [J])R =分(R、MAX(DIS [I] [J] -nw [J]、0.0 ))。
            // そうでなければR =分(R、DIS [I] [J])。
            //実際、各点間の距離は、彼から直接被覆することができる点の前に長さrが、前の点に関連しない後の時点を、クランプ
        } 
        NW [I] = R; 
        DFS(CNT + 1を、SUM + R&LT *のR&LT * 3.1415926 ); 
        VIS [I] = falseに; 
    } 
} 

int型のmain()
{ 
    scanfの(" %のD "、およびN-); 
    scanfの(" %LF%LF%LF%LF "、およびX [ 0 ]、 Y&[ 0 ]、X&[ 1。 、&​​Y [] 1。;]) 
     のためのINT I = 1 ; I <= N - 、I ++
        scanf関数(" %のLFの%のLF "、&​​XX [i]は、&YY [i])と、
        DS [I] =分(分(ABS(XX [I] -x [ 0 ])、ABS(XX [I] - X [ 1 ]))、分(ABS(YY [I] -y [ 0 ])、ABS(YY [I] -y [ 1 ])))。
    int型 iは= 1 ; iがN <I ++はためint型 J = I + 1、J <= N; J ++ 
            DIS [I] [J] = DIS [j]は[I] SQRT((XX [Iを= ] -XX [J])*(XX [I] -XX [J])+(YY [I] -YY [J])*(YY [I] - YY [J]))。
    
    DFS(00.0 )。
    DD TOT =(X [ 0] -x [ 1 ])*(Y [ 0 ]、Y [ 1 ])。
    もし(TOT < 0)TOT = - TOT。
     =早期年; 
    printf(" %0.0lfの\ nを" 、年); 
    
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/xwww666666/p/11748481.html