大樓輪廓線

2021-09-25 22:17:25 字數 2577 閱讀 1871

輸入第一行乙個數表示有n座大樓,後面依次輸入n行,每一行表示大樓的起始點,終點和高度,輸出為大樓輪廓資訊

如下圖:第一行輸出為3

後面有三行輸入表示大樓的資訊:

第二行為:1 3 3 

第三行為: 2 4 4

第三行為:5 6 1

輸出大樓輪廓資訊:

第一行:1 2 3

第二行:2 4 4

第三行:5 6 1

//建立上公升/下降、位置和高度資訊

class building

};bool cmp(building* p1, building* p2)

else

}//輸入大樓的資訊

class input

};int main()

vectorbuilding;

for (int i = 0; i < input.size(); ++i)

sort(building.begin(), building.end(), cmp);//按照位置排序

/*for (int i = 0; i < building.size(); ++i) */

maphtmap;//準備乙個紅黑樹,存放高度的map,key是高度,value是高度出現次數

mappmmap;//準備乙個紅黑樹,收集當前的最大高度,key為位置,value為當前的最大高度

for (int i = 0; i < building.size(); ++i)

else

}else

else }}

//開始收集每乙個位置的最大高度

if (htmap.size() == 0)

else

} //生成輪廓線,pmmap是嚴格公升序的

vectorres;

map::iterator iter;

int begin = 0;

int height = 0;

for (iter = pmmap.begin(); iter != pmmap.end(); ++iter)

//如果之前的高度等於0

begin = cur_position;

height = curmaxheight;

}} for (int i = 0; i < res.size(); ++i)

}}上面的收集資訊部分使用原有的input函式,下面使用list>收集資訊

//生成輪廓線,pmmap是嚴格公升序的

list> res;

int begin = 0;

int height = 0;

map::iterator iter;

for (iter = pmmap.begin(); iter != pmmap.end(); ++iter)

//如果之前的高度等於0

begin = cur_position;

height = curmaxheight;

}} list>::iterator iter1;

list::iterator iter2;

for (iter1 = res.begin(); iter1!=res.end(); ++iter1)

cout << endl;

}

下面還可以使用vector>收集輪廓資訊

//生成輪廓線,pmmap是嚴格公升序的

vector> res;

int begin = 0;

int height = 0;

map::iterator iter;

for (iter = pmmap.begin(); iter != pmmap.end(); ++iter)

//如果之前的高度等於0

begin = cur_position;

height = curmaxheight;

}} list::iterator iter1;

for (int i = 0; i < res.size(); ++i)

cout << endl;

}

3

1 4 3

2 6 5

7 8 1

1 2 3

2 6 5

7 8 1

21 4 5

3 6 3

1 4 5

4 6 3

41 4 5

3 7 6

5 9 3

8 10 4

1 3 5

3 7 6

7 8 3

8 10 4

1、map的底層實現是紅黑樹,按照key自動有序,使用map::rbegin()可以取出end()前面乙個key的值

2、list雙向鍊錶,使用迭代器訪問

輪廓線動態規劃

這類問題的共同特點是 在乙個比較 窄 的棋盤上進行複雜操作。如果採用傳統方法 以整行整列為狀態 進行動態規劃,將無法進行狀態轉移,因此只能把參差不齊的 輪廓線 作為狀態的一部分。儘管輪廓線的形態複雜,但由於棋盤比較窄,狀態總數仍然可以控制在可以接受的範圍內。直接看例題 1,鋪放骨牌 用1 2骨牌覆蓋...

輪廓線DP 專項

題意 n m n mn m n,m 11 的矩陣,填1 2 1 21 2或2 12 1 2 1方塊,求方案數 解析 以前寫過狀壓的做法,直接一行一行維護,現在寫輪廓線的做法 注意 當前填紅點的意思是,以紅點作為方塊的右下角 因為方塊長度為2,所以對紅點位置有三種操作 向上填 為了使所有方塊填滿,如果...

輪廓線動態規劃問題

好久木有更新了,感覺都有點陌生了,上個月因為各種奇怪的事情都沒有好好刷過題,做過的題也沒好好總結,so,這個月再好好努力!題目傳送 uva 11270 tiling dominoes 基礎的輪廓線動態規劃。ac include include include include include incl...