輸入第一行乙個數表示有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...