題目意思很清晰 求最多的巢狀個數 相等不能被巢狀
本文提供兩種解法
第一種解法對於 矩形邊長較小時效果比較好 但是如果矩形邊長特別大則不能有效求解
第一種解法是dp做的
定義dp[i][j] 為邊長為i和j的矩形 最多能巢狀多少個矩形
狀態轉移過程是這樣來的 當前狀態是由比當前矩形的寬小一 或者比當前矩形的長小一的兩種狀態的較大者來的
如果給定的這些矩形中存在乙個比當前矩形長寬都小一的矩形 那麼 dp[i][j] = max(dp[i][j] , dp[i - 1][j - 1] + 1);
儲存這些矩形資訊的方式是鄰接表 有點桶排序的意思 嗯 就是這樣
#include #include #include using namespace std;
const int n = 104;
int arr[n][n], dp[n][n];
int main()
int maxx = 0;
for(int i = 1; i < n; i ++)
}cout << dp[n - 1][n - 1] << endl;
}}/*
41 1
1 22 1
3 2*/
當然還有顯而易見的方法二 就是貪心了
首先我們按照矩形的長為第一順序 寬為第二順序 來排序 然後找出每個矩形能巢狀多少矩形 在找出最大的內個值就行了
#include #include #include using namespace std;
struct node
rectangle[1005];
bool cmp(const node &a, const node &b)
bool judge(const node &a, const node &b)
int main()
sort(rectangle , rectangle + n, cmp);
int ans = 0;
for (int i = 0; i < n; i ++)
}ans = max(ans , dp[i]);
}cout << ans << endl;
}}
NYOJ 16 矩形巢狀(動態規劃)
矩形巢狀 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a參考最長上公升子串行長度 狀態轉移方程dp i max dp i dp j 1 include include ...
NYOJ 16 矩形巢狀(動態規劃)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a 輸入 第一行是乙個正正數n 0輸出 每組測試資料都輸出乙個數,表示最多符合條件的矩形數目,每組輸出佔一行 樣例輸入 1 ...
NYOJ 16 矩形巢狀(動態規劃)
矩形巢狀 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述有n個矩形,每個矩形可以用a,b來描述,表示長和寬。矩形x a,b 可以巢狀在矩形y c,d 中當且僅當a 輸入第一行是乙個正正數n 0 每組測試資料的第一行是乙個正正數n,表示該組測試資料中含有矩形的個數 n 1000...