NOIP 2002 矩形覆蓋

2021-07-23 23:39:52 字數 1353 閱讀 8426

題目描述

在平面上有 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 面積和為 4。問題是當 n 個點座標和 k 給出後,怎樣才能使得覆蓋所有點的 k 個矩形的面積之和為最小呢。約定:覆蓋乙個點的矩形面積為 0;覆蓋平行於座標軸直線上點的矩形面積也為0。各個矩形必須完全分開(邊線與頂點也都不能重合)。

輸入輸出格式

輸入格式:

n k xl y1 x2 y2 … …

xn yn (0<=xi,yi<=500)

輸出格式:

輸出至螢幕。格式為:

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

輸入輸出樣例

輸入樣例#1:

4 2

1 1

2 2

3 6

0 7輸出樣例#1:

【**】

//noip 2002 矩形覆蓋 

#include

#include

#include

#include

#include

#define ll long long

#define m(a) memset(a,0,sizeof a)

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

const

int mxn=55;

int n,k,ans=1e8;

int x[mxn],y[mxn],mxx[10],mnx[10],mxy[10],mny[10],vis[10];

inline

int calc()

return res;

}inline

bool judge()

return1;}

inline

void dfs(int num)

int i,j,tmp1,tmp2,t***,tmp4;

fo(i,1,k)

if(mnx[i]<=x[num] && x[num]<=mxx[i] && mny[i]<=y[num] && y[num]<=mxy[i])

fo(i,1,k)

}int main()

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 覆蓋,s1,s2...

noip2002矩陣覆蓋(搜尋)

矩陣覆蓋 在平面上有 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 覆蓋,...