2002NOIPTG 矩形覆蓋 搜尋

2021-09-29 06:35:25 字數 1423 閱讀 4707

題目描述

在平面上有n個點(n≤50),每個點用一對整數座標表示。例如:當n=4 時,4個點的座標分另為:p_1 (1,1),p_2 (2,2),p_3(3,6),p_4(0,7),見圖一。

這些點可以用k個矩形(1≤k≤4)全部覆蓋,矩形的邊平行於座標軸。當 k=2 時,可用如圖二的兩個矩形 s_1,s_2覆蓋,s_1,s_2面積和為4。問題是當n個點座標和k給出後,怎樣才能使得覆蓋所有點的k個矩形的面積之和為最小呢?

約定:覆蓋乙個點的矩形面積為0;覆蓋平行於座標軸直線上點的矩形面積也為0。各個矩形必須完全分開(邊線與頂點也都不能重合)。

輸入格式

n kx_1 y_1

x_2 y_2

… …x_n y_n

輸出格式

輸出至螢幕。

格式為:

1個整數,即滿足條件的最小的矩形面積之和。

輸入輸出樣例

輸入 #1

4 21 1

2 23 6

0 7輸出 #1

4ac**

#include

#define re register int

using

namespace std;

struct node e[

505]

;struct rec p[5]

;int n,k,ans=

0x3f3f3f3f

;inline

intmin

(int a,

int b)

inline

intmax

(int a,

int b)

inline

bool

in(rec a,

int x,

int y)

inline

bool

judge

(rec a,rec b)

inline

void

dfs(

int num)

} value+

=(p[i]

.r-p[i]

.l)*

(p[i]

.u-p[i]

.d);}if

(value>ans)

return

;//最優性剪枝

if(num>n)

for(re i=

1;i<=k;i++

)else}}

intmain()

dfs(1)

;printf

("%d"

,ans)

;return0;

}

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...