巢狀矩陣問題

2022-07-31 08:39:12 字數 943 閱讀 9914

題目描述:

有n個矩形,每個矩形可以用兩個整數來描述,表示它的長與寬。矩形x(a, b) 可以巢狀在矩形 y(c, d) 中,當且僅當 a < c, b< d 或者 b < c, a < d (矩陣可以旋轉90度)。你的任務是選出盡可能多的矩陣排成一行,使得每乙個矩形(除最後乙個矩陣)都可以巢狀在後乙個矩形內。

注:如果有多解,矩形編號的數字盡量小。

解題思路:

這個題是dag(有向無環圖)上的最長路經問題。這個題是要我們求不固定起點的最長路經。

我們可以用動態規劃來做,令d [ i ] 為從第i個矩形出發最長路長度。

可寫出狀態轉移方程: d[ i ] = max( d[ i ] , dp( j ) + 1 )

要輸出字典序最小的解,只需每次找尋下乙個解的時候,從第乙個矩形開始迴圈即可。

#include #include 

#include

#include

#define max 100

using

namespace

std;

struct

mat;

mat a[max];

intg[max][max];

intd[max];

intt,n;

int dp(int

i)void display(int

i) }

}int

main()

//dag矩陣 g 構建完成

int max_i = 0

;

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

if(dp(max_i) max_i =i;

cout

display(max_i);

}return0;

}

動態規劃 矩陣巢狀問題

整理的演算法模板合集 acm模板 題意 有n個矩陣,每個矩陣可以用兩個整數a b描述,表示它的長和寬。矩陣x a,b 可以巢狀在矩形y c,d 中,當且僅當a include include include include define x first define y second using n...

矩陣巢狀(DAG)

題目 見紫書 思路都是根據紫書來的,然後重點是學習了一下利用結構體自定義矩陣的方法,這個方法確實比直接兩兩比較是否能夠巢狀優化了很多 大佬的 菜雞的 include include include using namespace std const int maxn 100 5 int depth ...

C 實現巢狀矩陣

有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a第一行是乙個正正數n 0每組測試資料都輸出乙個數,表示最多符合條件的矩形數目,每組輸出佔一行 1 101 2 2 45 8 6 10 7 93 1 5 812 10 9 72 2 設d i 表示...