P1034 矩形覆蓋

2021-08-28 07:14:09 字數 1313 閱讀 2704

在平面上有nn個點(n \le 50n≤50),每個點用一對整數座標表示。例如:當 n=4n=4 時,44個點的座標分另為:p_1p1​(1,11,1),p_2p2​(2,22,2),p_3p3​(3,63,6),p_4p4​(0,70,7),見圖一。

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

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

輸入格式:

n knk

x_1 y_1x1​y1​

x_2 y_2x2​y2​

... ...

x_n y_nxn​yn​ (0 \le x_i,y_i \le 5000≤xi​,yi​≤500)

輸出格式:

輸出至螢幕。格式為:

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

輸入樣例#1:複製

4 2

1 12 2

3 60 7

輸出樣例#1:複製

4
沒懂**:

#include

#include

#include

#include

using namespace std;

int n,r,zt[55],a[10] = ,best=0x7fffffff;

int maxn,may,mix,miy;

struct node w[510];

void pint()

s+=(maxn-mix)*(may-miy);

maxn=may=0;

mix=miy=0x7fffffff;

}if(s>n>>r;

for(int i=1; i<=n; i++)

sort(w+1,w+n+1,cmp);

a[r]=n;

sousuo(1);

sort(w+1,w+n+1,cmp);

sousuo(1);//兩次搜尋

cout<

return 0;

}

P1034 矩形覆蓋

在平面上有 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...

題解 P1034 矩形覆蓋

在平面上有n個點 n 50 每個點用一對整數座標表示。例如 當n 4時,4個點的座標分另為 p1 1,1 p2 2,2 p3 3,6 p4 0,7 見圖一。這些點可以用k個矩形 1 k 4 全部覆蓋,矩形的邊平行於座標軸。當k 2時,可用如圖二的兩個矩形s1,s2覆蓋,81,s2面積和為4。問題是當...

洛谷P1034矩形覆蓋

據說是dp,所以我用dfs,居然a了,資料真水 說說思路,我們要求覆蓋所有點且不能重疊,顯然我們要從點入手,我們可以列舉每個點被哪個矩形重疊,因為如果列舉矩形覆蓋點的話,貌似不可做,具體怎麼實現呢?最好小夥伴們手動畫個圖,一下就明白了,列舉每個點被哪個矩形覆蓋,那麼必然是要根據點的座標來調整矩形的位...