然後就知道這個是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 ...