洛谷p1034 矩形覆蓋
暴搜因為 k<=4 所以爆搜一下就行
1、對於每個點 爆搜他屬於哪乙個矩形
2、並且 用這個點 來更新矩形的 左邊界 右邊界 上邊界 下邊界
3、回溯
優化 1、一邊加入點一邊判斷是否符合要求
2、已有的矩形中是否有相互覆蓋的情況
3、以及現在的矩形面積是否大於已有的 最小答案的矩形 如果是 說明不可能更優,那麼就直接退出
1 #include 2 #include 3 #include 4 #include 5 #include6 #include 7 #include 8 #include 9
using
namespace
std ;
1011 inline int
read() 12
16while(ch>='
0'&&ch<='
9')
17return x*f ; 18}
1920
21const
int maxn = 51,inf =1e9 ;
22struct
dot d[51
];25
struct
noderec[5
] ;28
intn,k,ans ;
2930 inline int
gets()
3138
return
sum ; }
3940
41 inline bool conf(int i,int
j) 42
5253 inline bool
can()
5460
61 inline void dfs(int
used)
6269
for(int i=1;i<=k;i++)
7079}80
81int
main()
8293
94 dfs( 0
) ;
95 printf("
%d\n
",ans) ;
9697
98return0;
99 }
洛谷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...
洛谷 P1034 矩形覆蓋(dfs)
有n個點k個矩陣,k個矩陣包含n個點,求這k個矩陣的最小面積 因為資料範圍很小,所以可以直接暴搜,求每個點可以存在矩陣的位置,利用幾次剪枝 因為資料太水,不剪也行 即可通過 include using namespace std define ll long long const int maxn ...