油滴擴充套件 洛谷1378 搜尋

2021-07-26 01:22:14 字數 1401 閱讀 8983

在乙個長方形框子裡,最多有n(0≤n≤6)個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?(不同的油滴不會相互融合)

注:圓的面積公式v=pi*r*r,其中r為圓的半徑。

第1行乙個整數n。

第2行為長方形邊框乙個頂點及其對角頂點的座標,x,y,x』,y』。

接下去n行,每行兩個整數xi,yi,表示盒子的n個點的座標。

以上所有的資料都在[-1000,1000]內。

一行,乙個整數,長方形盒子剩餘的最小空間(結果四捨五入輸出)

題目滿是屮點,不想說了

n只有6,直接無腦dfs,注意判斷點在盒子外的情況

#include 

#include

#include

#define rep(i, a, b) for (int i = a; i <= b; i++)

#define fill(x, t) memset(x, t, sizeof(x))

#define db double

#define inf 0x3f3f3f3f

#define pi 3.141592653

#define n 7

using

namespace

std;

struct recr;

struct circ[n];

int vis[n];

db ans = inf;

inline

int read()

ch = getchar();

}while (ch <= '9' && ch >= '0')

return x * v;

}inline db dist(cir a, cir b)

inline db cal(db r)

inline db max(db x, db y)

inline db min(db x, db y)

rep(i, 1, n)

}r = min(r, c[i].y - rc.d);

r = min(r, rc.u - c[i].y);

r = min(r, c[i].x - rc.l);

r = min(r, rc.r - c[i].x);

if (r > 0)else}}

}int main(void);

rep(i, 1, n);

}dfs(1, (r.u-r.d) * (r.r-r.l), r, n);

printf("%d\n",int(ans + 0.5));

return

0;}

洛谷 1378 油滴擴充套件

又有浮點數,桑心 話說lxt的14.0下取整竟然成了13?2333,害怕了。go to the problem 題目描述 在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢...

洛谷1378 油滴擴充套件 dfs進行回溯搜尋

題目中給出矩形的長寬和一些點,可以在每個點放油滴,油滴會擴充套件,直到觸碰到矩形的周邊或者其他油滴的邊緣,求出剩餘面積的最小值,就是求油滴面積的最大值。策略是dfs加上回溯,暴力求解。如下 1 include2 using namespace std 3 typedef unsigned int u...

洛谷 P1378 油滴擴充套件

題目描述 在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同...