NYOJ 16 矩形巢狀 DAGdp或spfa

2021-07-17 00:23:25 字數 1781 閱讀 7407

矩形巢狀

時間限制: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)中。你的任務是選出盡可能多的矩形排成一行,使得除最後乙個外,每乙個矩形都可以巢狀在下乙個矩形內。

輸入 第一行是乙個正正數n(0 < n < 10),表示測試資料組數,

每組測試資料的第一行是乙個正正數n,表示該組測試資料中含有矩形的個數(n<=1000)

隨後的n行,每行有兩個數a,b(0 < a,b < 100),表示矩形的長和寬

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

樣例輸入

1 10

1 2

2 4

5 8

6 10

7 9

3 1

5 8

12 10

9 7

2 2樣例輸出

5白書上的。。懶得想什麼dp了,直接spfa即可

另外對於x能巢狀在y裡面就連邊 x->y

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#ifdef win32

#define auto "%i64d"

#else

#define auto "%lld"

#endif

using

namespace

std;

#define smax(x,tmp) x=max((x),(tmp))

#define smin(x,tmp) x=min((x),(tmp))

#define maxx(x1,x2,x3) max(max(x1,x2),x3)

#define minn(x1,x2,x3) min(min(x1,x2),x3)

const

int inf=0x3f3f3f3f;

const

int maxn = 1005;

struct edge

edge[maxn*maxn];

int head[maxn];

int maxedge;

int in[maxn];

inline

void addedge(int u,int v,int c)

; head[u] = maxedge;

in[v]++;

}struct matrix

}matrix[maxn];

int n;

void init()

bool inque[maxn];

int dis[maxn];

int spfa()}}

return *max_element(dis+1,dis+n+1);

}int main()

return

0;}

NYOJ16 矩形巢狀 DAG DP

有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 25第一種是dag 記憶化搜尋求最長路,求從任意矩形開始的巢狀數量得到最大數量。第二種方法是純dp,從0滾...

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 ...