基礎演算法 巢狀矩形

2021-07-14 09:42:34 字數 942 閱讀 2038

有n個矩形,每個矩形可以用兩個整數a,b描述,表示它的長和寬。矩形x(a, b)可以巢狀在矩形y(c,d)中當且僅當a你的任務是選出盡量多的矩形排成一行,使得除了最後乙個外,每乙個矩形都可以巢狀在下乙個矩形內。

第1行:1個整數n(1<=n<=1000)

第2..n+1行:每行2個整數,分別表示矩形的兩個邊長。每個矩形依次編號為1~n。

第1行:1個整數k,表示巢狀的最大層數。

第2行:k個整數,表示依次巢狀的矩形的編號。若有多組解,輸出字典序最小的一組解。

copy

(如果複製到控制台無換行,可以先貼上到文字編輯器,再複製)

8

14 9

15 19

18 12

9 10

19 17

15 9

2 13

13 10

4

4 8 3 2

樣例說明:最大巢狀深度為4。4個矩形編號分別是:4 8 3 2,它們的大小關係是:

(9, 10) < (13, 10) < (18,12) < (15,19)

在輸入時預處理,使寬始終小於等於長。以寬從大到小排序,按長做最下降公升子串行。(p.s.從小到大排序後做最長上公升子串行不行)。mind:記錄時要以最開始輸入的順序而不是排序後的順序。# include # include # include # include # define maxn 10+1000

using namespace std;

struct nodean[maxn];

bool cmp(node a,node b)

bool c(node a,node b)

sort(an+1,an+n+1,cmp);

for(i=2;i<=n;i++)

if(f[an[i].a]==f[an[j].a]+1&&an[j].a

基礎演算法 巢狀矩形

時間限制 1 sec 記憶體限制 128 mb 有n個矩形,每個矩形可以用兩個整數a,b描述,表示它的長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a你的任務是選出盡量多的矩形排成一行,使得除了最後乙個外,每乙個矩形都可以巢狀在下乙個矩形內。第1行 1個整數n 1 n 1000 第2....

矩形巢狀 DP

原先沒看出來,後來發現和議題很像,都是胴體規劃,那題是給你一些點的座標,找到最多的點連成的顯示單調的 include includestruct asd ju 1010 int cmp const void a,const void b int qian int j,int i void sol i...

矩形巢狀 DAG LIS

矩形巢狀 描述有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a如果矩形x可以巢狀在矩形y裡,我們就從x到y連一條有向邊,最後會形成乙個dag。include include include using namespace std const ...