NYOJ 16 矩形巢狀

2021-07-11 20:49:23 字數 2271 閱讀 4950

描述

有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一道有意思的動歸題,然而不安分的我想嘗試用用別的方法做,於是寫了乙個wa的**,感覺上是挺對的,可是細細品味,發現乙個致命的錯誤。

錯誤**如下(c):

//問題**,此寫法有點像貪心,存在後效應性,需要用動態規劃取消後效應性

//從大到小開始查詢,這裡我們選擇的不是尺寸最大的,而是可以包含(巢狀)矩形數最多的

//#include

//#define max(a, b) a > b ? a : b

//#define maxsizen 1001

//int t[maxsizen] = ;

//int ans;

//typedef struct

// rec; //矩形

//rec r[maxsizen];

//////檢索小於a[i]和b[i]的最大矩形對應的t[j]

//void retrieve(int p, int n)

//// }

// }

// ans++;

// if(t[q])

//

//}//

//int main(int argc, const char * argv)

//// else

//

// }

//

// int p = 0;

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

//

// }

// if(t[i] > t[p])

//

// }

//

// retrieve(p, n);

//

// printf("%d\n", ans);

// }

////

// return 0;

//}

這種方法偏向於貪心演算法,可是我忽略了最重要的問題,貪心演算法不能存在後效應性,而我的寫法卻完美的撞上了這個問題!!!

所以,只有另覓動歸了……

//動歸

#include

#include

#define max(a, b) a > b ? a : b

#define maxsizen 1001

int dp[maxsizen]; //dp[i]當排好序的前i個矩形符合條件的包括第i個時的最大值

int ans;

typedef

struct

rec; //矩形

int main(int argc, const

char * argv)

else

}//按一條邊排序

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

int flag;

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

}dp[i] += flag;

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

}printf("%d\n", ans);

}return

0;}

ac**,哦耶+_+!!!

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

NYOJ16 矩形巢狀

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