有n個點k個矩陣,k個矩陣包含n個點,求這k個矩陣的最小面積
因為資料範圍很小,所以可以直接暴搜,求每個點可以存在矩陣的位置,利用幾次剪枝(因為資料太水,不剪也行)即可通過
#include
using namespace std;
#define ll long long
const
int maxn =55;
const
int inf =
0x3f3f3f3f
;struct pointpoint[maxn]
;struct regreg[5]
;int n, k, ans = inf;
bool in
(reg a,
int x,
int y)
bool judge
(reg a, reg b)
void
dfs(
int num)
value +
=(reg[i]
.r - reg[i]
.l)*
(reg[i]
.u - reg[i]
.d);
//value加上矩陣的面積}if
(value >= ans)
return
;//如果value大於已得的值,return
if(num > n)
//每乙個點有m種可能的矩陣
for(
int i =
1; i <= k; i ++
)else}}
intmain
(int argc,
char
const
*argv)
洛谷 P1034 矩形覆蓋 dfs
可能是資料太水了瞎搞都可以過。判斷兩個平行於座標軸的矩形相交 含頂點與邊相交 的 一併附上。記得這裡的xy和udlr是指數學上的座標軸。includeusing namespace std define ll long long struct point p 51 struct rectangle ...
洛谷P1034矩形覆蓋
據說是dp,所以我用dfs,居然a了,資料真水 說說思路,我們要求覆蓋所有點且不能重疊,顯然我們要從點入手,我們可以列舉每個點被哪個矩形重疊,因為如果列舉矩形覆蓋點的話,貌似不可做,具體怎麼實現呢?最好小夥伴們手動畫個圖,一下就明白了,列舉每個點被哪個矩形覆蓋,那麼必然是要根據點的座標來調整矩形的位...
搜尋 洛谷P1034 矩形覆蓋
然後就知道這個是noip提高的題目 說好k 4,其實k最大只有3 然後資料沒有對每一種情況近判斷性,所以本來300 的 因為有些用不到可以變成100 我曹 include include include define ll long long using namespace std int x 51...