NYOJ16 矩形巢狀 DAG DP

2021-09-11 18:20:37 字數 1546 閱讀 2241

有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x(a,b)可以巢狀在矩形y(c,d)中當且僅當a複製

1

101 2

2 45 8

6 10

7 93 1

5 812 10

9 72 2

5
第一種是dag & 記憶化搜尋求最長路,求從任意矩形開始的巢狀數量得到最大數量。

第二種方法是純dp,從0滾動到max_n - 1,得到最終滾動值,資料量小的時候特別好用。

#include #include #include #include #include #include #include using namespace std;

typedef long long ll;

#define lowbit(x) x & -x;

#define inf 0x3f3f3f3f;

#define pi 3.1415927

const static int max_n = 1005;

struct recrec[max_n];

int dp[max_n];

bool g[max_n][max_n];

int n;

int dag(int s)

} return dp[s];

}void buildgraph()

} }}/*按字典序列印dag路徑*/

void printgraph(int s) }}

int main()

} buildgraph();

memset(dp, 0, sizeof(dp));

int res = 0;

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

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

/*多解情況下按字典序優先列印最大巢狀數路徑

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

}*/} return 0;

}

#include #include #include #include #include #include #include using namespace std;

typedef long long ll;

#define lowbit(x) x & -x;

#define inf 0x3f3f3f3f;

#define pi 3.1415927

const static int max_n = 105;

int dp[max_n][max_n];

bool g[max_n][max_n];

int main()

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

}} printf("%d\n", dp[max_n - 1][max_n - 1]);

} return 0;

}

NYOJ 16 矩形巢狀 DAGdp或spfa

矩形巢狀 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a c,b d或者b c,a d 相當於旋轉x90度 例如 1,5 可以巢狀在 6,2 內,但不能巢狀在 3,4 ...

nyoj 16 矩形巢狀

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當ab套在 6,2 內,但不能巢狀在 3,4 中。你的任務是選出盡可 能多的矩形排成一行,使得除最後乙個外,每乙個矩形都可以巢狀...

NYOJ 16 矩形巢狀

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