矩形ブロックの家で、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(0、0.0 )。 DD TOT =(X [ 0] -x [ 1 ])*(Y [ 0 ]、Y [ 1 ])。 もし(TOT < 0)TOT = - TOT。 年 =早期年; printf(" %0.0lfの\ nを" 、年); リターン 0 ; }