nyoj 16 矩形嵌套 (DAG上的DP)
生活随笔
收集整理的這篇文章主要介紹了
nyoj 16 矩形嵌套 (DAG上的DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
矩形嵌套
時間限制:3000 ms ?|? 內存限制:65535 KB 難度:4 描述每組測試數據的第一行是一個正正數n,表示該組測試數據中含有矩形的個數(n<=1000)
隨后的n行,每行有兩個數a,b(0<a,b<100),表示矩形的長和寬
(典型的DAG上的動態規劃)推薦看劉汝佳的書
#include <cstdio> #include <cstring> #include <algorithm>using namespace std; typedef struct Rec{int a, b; }Rec; bool cmp(Rec r1, Rec r2) {return r1.a < r2.a;//最初寫的是 return r1.a<=r2.a&&r1.b<r2.b;但不知道為什么一直報錯 } Rec r[1005]; int G[1005][1005]; int d[1005], n; int dfs(int i){if(d[i] > 0) return d[i];d[i] = 1;for(int j=0; j<n; j++){int te = dfs(j)+1;if(G[i][j]){if(d[i] < te) d[i] = te;}}return d[i]; } int main() {int t;scanf("%d", &t);while(t--){memset(G, 0, sizeof(G));memset(d, 0, sizeof(d));scanf("%d", &n);for(int i=0; i<n; i++){int x, y;scanf("%d%d", &x, &y);r[i].a = x<y?x:y;r[i].b = x>y?x:y;}sort(r, r+n, cmp);for(int i=0; i<n; i++){for(int j=0; j<n; j++){if(r[i].a<r[j].a&&r[i].b<r[j].b)G[i][j] = 1;}}int maxn=0;for(int i=0; i<n; i++){int tem = dfs(i);if(tem > maxn) maxn = tem;}printf("%d\n", maxn);}return 0; }
總結
以上是生活随笔為你收集整理的nyoj 16 矩形嵌套 (DAG上的DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 58 转转技术总监骆俊武:一个核心系统
- 下一篇: 浪费超9000亿美金,数字化转型失败罪魁