(本人本題完成於2016-7-21)
題目大意:用k(不超過4)個矩形覆蓋平面上的n(不超過50)個點,求這些矩形面積之和的最小值。
做法:記錄每乙個矩形的左下角和右上角座標,左下角座標初始化為(inf,inf),右上角座標初始化為(-inf,-inf)。然後dfs,列舉當前的點在哪乙個矩形中,如果當前的點不在列舉到的矩形中,則相應的將矩形擴大到正好覆蓋這個點,如果此時矩形之間沒有相互覆蓋並且矩形的總面積沒有超過當前已得的最優解,則繼續拓展。
以下是本人**:
#include#include
#include
#include
#define inf 99999999
using
namespace
std;
intn,k,ans=inf;
struct
dotd[
51];
struct
sqrrec[5];
bool
conf(
inti,
intj)
//判斷矩形i,j是否相互覆蓋
bool
can()
//判斷矩形間是否相互覆蓋
intgets()
//獲取當前矩形的總面積
void
dfs(
intused)
for(inti=1
;i<=k;i++)
}
intmain()
dfs(0);
//dfs
printf
("%d"
,ans);
return
0;
}
noip2002 矩形覆蓋
在平面上有 n 個點 n 50 每個點用一對整數座標表示。例如 當 n 4 時,4個點的座標分別為 p1 1,1 p2 2,2 p3 3,6 p4 0,7 如圖1。這些點可以用 k 個矩形 1 k 4 全部覆蓋,矩形的邊平行於座標軸。當 k 2 時,可用如圖2的兩個矩形 sl,s2 覆蓋,s1,s2...
NOIP 2002 矩形覆蓋
題目描述 在平面上有 n 個點 n 50 每個點用一對整數座標表示。例如 當 n 4 時,4個點的座標分另為 p1 1,1 p2 2,2 p3 3,6 p4 0,7 見圖一。這些點可以用 k 個矩形 1 k 4 全部覆蓋,矩形的邊平行於座標軸。當 k 2 時,可用如圖二的兩個矩形 sl,s2 覆蓋,...
noip 2002 矩形覆蓋
在平面上有 n 個點 n 50 每個點用一對整數座標表示。例如 當 n 4 時,4個點的座標分另為 p1 1,1 p2 2,2 p3 3,6 p4 0,7 見圖一。這些點可以用 k 個矩形 1 k 4 全部覆蓋,矩形的邊平行於座標軸。當 k 2 時,可用如圖二的兩個矩形 sl,s2 覆蓋,s1,s2...