搜尋 洛谷P1034 矩形覆蓋

2021-07-29 20:14:16 字數 1160 閱讀 1687

然後就知道這個是noip提高的題目;

說好k<=4,其實k最大只有3;

然後資料沒有對每一種情況近判斷性,所以本來300+的**因為有些用不到可以變成100+;

我曹;

#include#include#include#define ll long long

using namespace std;

int x[51],y[51];

int n,m,x1,x2,y1,y2;

void a()

if(x1==1e9)x1=x2=0;

printf("%d",(x2-x1)*(y2-y1));

}void b()

if(x1==1e9)x1=x2=0;

ans+=(x2-x1)*(y2-y1);

x1=y1=1e9;x2=y2=0;

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

if(x1==1e9)x1=x2=0;

ans+=(x2-x1)*(y2-y1);

sum=min(sum,ans);

}for(int k=0;k<=500;k++)

if(x1==1e9)x1=x2=0;

ans+=(x2-x1)*(y2-y1);

x1=y1=1e9;x2=y2=0;

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

if(x1==1e9)x1=x2=0;

ans+=(x2-x1)*(y2-y1);

sum=min(sum,ans);

}printf("%d",sum);

}void c()

if(x1==1e9)x1=x2=0;

ans+=(x2-x1)*(y2-y1);

// if(k==1&&j==2)coutfor(int i=1;i<=n;i++)

if(x1==1e9)x1=x2=0;

ans+=(x2-x1)*(y2-y1);

// if(k==1&&j==2)coutfor(int i=1;i<=n;i++)

if(x1==1e9)x1=x2=0;

// if(k==1&&j==2)coutsum=min(sum,ans);

}printf("%d",sum);

}int main()

洛谷P1034矩形覆蓋

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

洛谷 P1034 矩形覆蓋(dfs)

有n個點k個矩陣,k個矩陣包含n個點,求這k個矩陣的最小面積 因為資料範圍很小,所以可以直接暴搜,求每個點可以存在矩陣的位置,利用幾次剪枝 因為資料太水,不剪也行 即可通過 include using namespace std define ll long long const int maxn ...

洛谷 P1034 矩形覆蓋 dfs

可能是資料太水了瞎搞都可以過。判斷兩個平行於座標軸的矩形相交 含頂點與邊相交 的 一併附上。記得這裡的xy和udlr是指數學上的座標軸。includeusing namespace std define ll long long struct point p 51 struct rectangle ...