動態規劃 矩形巢狀

2021-08-29 12:15:43 字數 1478 閱讀 4078

時間限制:3000 ms  |  記憶體限制:65535 kb

難度:4

輸入第一行是乙個正正數n(0輸出

每組測試資料都輸出乙個數,表示最多符合條件的矩形數目,每組輸出佔一行

樣例輸入

1

101 2

2 45 8

6 10

7 93 1

5 812 10

9 72 2

樣例輸出

5
描述

有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x(a,b)可以巢狀在矩形y(c,d)中當且僅當a該題目同樣可以兩個方法,第一種遞迴是遍歷每乙個點,記錄每乙個點最大的矩陣巢狀,如果已經求過的,像數字三角形那樣儲存起來。直接return就行了

遞迴解法:

#include using namespace std;

typedef long long ll;

const int inf = 0x3f3f3f3f;

struct recrec[1010];

int g[1010][1010]; //圖

int n,n;

int d[1010]; //儲存每個點巢狀長度

int dp(int cur)

d[cur]++;

return d[cur];

}int main()

//遍歷所有矩形,儲存每個矩形的巢狀長度

int maxn = -inf;

for(int i = 0; i < n; i++)

printf("%d\n",maxn);

}return 0;

}

遞推解法,這種解法是按照最長上公升子串行的想法轉變而來的,我們需要將他按照x和y的大小排好序,那麼大的矩陣就是大的數字,其中有些y不夠或者x不夠的就是其中較小的數字,這樣一轉移就是變成了遞推解法

遞推:

#include using namespace std;

typedef long long ll;

const int inf = 0x3f3f3f3f;

struct rec

}rec[1010];

int g[1010][1010]; //圖

int n,n;

int d[1010]; //儲存每個點巢狀長度

int main()

sort(rec,rec+n);

//先全部賦值為1

for(int i = 0; i < n; i++) d[i] = 1;

for(int i = 0; i < n; i++)

}int maxn = -inf;

for(int i = 0; i < n; i++) maxn = max(maxn,d[i]);

printf("%d\n",maxn);

}return 0;

}

動態規劃 矩形巢狀

時間限制 3000 ms 記憶體限制 65535 kb 難度 4描述 有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a輸入 第一行是乙個正正數n 0輸出 每組測試資料都輸出乙個數,表示最多符合條件的矩形數目,每組輸出佔一行 樣例輸入 1 10...

經典動態規劃 巢狀矩形

經典動態規劃 巢狀矩形 描述有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a輸入 第一行是乙個正正數n 0輸出 每組測試資料都輸出乙個數,表示最多符合條件的矩形數目,每組輸出佔一行 include include include using ...

動態規劃 矩形巢狀問題

矩形巢狀 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a根據題意,首先可以想象的到,如果乙個矩形能鑲嵌另乙個矩形,那麼這個矩形的面積就一定比另乙個矩形的面積大了。所以,...