以逆序來進行放置,即n to 1。逆序的好處在於放置乙個矩形後,俯視看到的就是最終俯視該矩形應該看到的。因為擋著它的矩形在之前已經放置好了,所以可直接統計,為遞迴創造了條件。每放乙個矩形,可以想象成將其扔入一密度很大的海水底部,海分成了n層,然後矩形開始向上浮。在上浮過程中若碰撞到其他的矩形則斷裂成幾個小矩形,繼續上浮,直到浮出水面。於是想到用個遞迴來模擬上浮過程。
procedure cover(l,r,s,d,k,col:integer
); begin
while
(k<=n)
and(
(r<=x1[k])or
(l>=x2[k])or
(d<=y1[k])or
(s>=y2[k]))
do inc(k);
if k>n then
begin ans[col]
:=ans[col]
+(r-l)
*(d-s); exit; end;
if l<=x1[k]
then
begin cover(l,x1[k]
,s,d,k+
1,col); l:=x1[k]; end;
if r>=x2[k]
then
begin cover(x2[k]
,r,s,d,k+
1,col); r:=x2[k]; end;
if s<=y1[k]
then
begin cover(l,r,s,y1[k]
,k+1
,col); s:=y1[k]; end;
if d>=y2[k]
then
begin cover(l,r,y2[k]
,d,k+
1,col); d:=y2[k]; end;
end;
(主要是對於這一題沒有深刻的理解,如果對圖能更好的深入透析,這就寫得出來了。這個方法速度很快)
#include
#include
#include
#include
#include
using namespace std;
int ans[3000],n;
struct sfaftu[1010];
void piaofu(int x1,int x2,int y1,int y2,int k,int col);
int main()
for(int i=n;i>=0;i--)
for(int i=1;i<=2500;i++)
if(ans[i]!=0)cout<=tu[k].x2||x2<=tu[k].x1||y1>=tu[k].y2||y2<=tu[k].y1)&&k<=n)k++;
if(k==n+1)
if(x1tu[k].x2)
if(y1tu[k].y2)
}
3 15學習計畫
1 做一套計算機二級題 3 背英語單詞 2 計畫完成度 1 我平時可以在手機上做二級的選擇題,所以就節省時間,在電腦上做題的時候,就只做了操作題部分。這個word有些 呢,很多都是沒見過的操作哦,而且操作的量很大。本來的檔案,沒有修改時,是有47頁的,要求我們把書稿中的包含 級別的標題,分別用 一級...
315前侃服務
相信很多人在購買實物產品時都會關注後續的服務,畢竟面對產品在使用週期內出現的各種問題,消費者不可避免地需要與生產廠家或銷售商溝通解決,而在虛擬經濟日益成長的網際網路領域,出現了越來越來的爭執,而消費者在面對服務提供者維權時基本是兩眼一抹黑,這塊也沒有可參考的法律法規,完全由服務提供者一言而決。下面說...
USACO 修理牛棚
同樣是一道貪心題,我的思路是用乙個陣列存下所有的空擋,對空擋進行排序,然後再在總長度中減去前m 1 大的空檔長度。關鍵還是理解題意。貌似洛谷 oj不支援 int min 之類的。還有要對初始資料排一次序,害我 wa了一次。include include includeusing namespace ...