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