DAG模型
来源:互联网 发布:知豆电动汽车价格 编辑:程序博客网 时间:2024/05/18 17:25
【题意】
有n个矩形,每个矩形都有长和宽,表示为a和b
矩形X(a,b)可以镶嵌在矩形Y(c,d)中当且仅当a<c , b<d 或者 a<d , b<c (相当于把矩形X旋转90°)
求出能嵌套在一个里面的最多数
【思路】
这是DP里的一种,先排序,在搜的时候记录深度,当找到可以嵌套的矩形时直接返回值
时间复杂度为O(n*n)
矩形的长和宽按照长>宽排列
【代码】
#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <algorithm>#define N 100using namespace std;int dp[N];int n;struct matrix{ int l,w;}m[N];bool cmp(matrix a, matrix b){ if(a.l != b.l) return a.l<b.l; return a.w<b.w;}void DP(){ int ans = 0; for(int i=0; i<n; i++) { for(int j=0; j<i; j++) { if(m[j].l<m[i].l && m[j].w<m[i].w) { dp[i] = max(dp[i], dp[j]+1); } } if(dp[i]==0) dp[i] = 1; //若没有能嵌套的,则最多个数就是当前的一块 ans = max(ans, dp[i]); } printf("%d\n", ans);}int main(){ while(1) { memset(dp, 0, sizeof(dp)); scanf("%d",&n); if(n==0) break; for(int i=0; i<n; i++) { scanf("%d%d",&m[i].l, &m[i].w); if(m[i].l < m[i].w) swap(m[i].l, m[i].w); } sort(m, m+n, cmp); DP(); } return 0;}
- DAG模型
- DAG模型
- DAG模型 矩形嵌套
- DAG模型简单题
- DAG模型硬币问题
- DAG模型-嵌套矩阵
- dp(DAG模型)
- DAG模型的动态规划
- DAG 模型小讲 【 理解 + 例题 】
- NYOJ16 矩形嵌套 (DAG模型_dp)
- 嵌套模型(DAG上的动态规划
- 动态规划 DAG模型 硬币问题
- DAG模型—嵌套矩形问题
- DAG模型——硬币问题
- DAG模型的动态规划学习
- DP<DAG模型的最短路>
- DAG
- DAG
- Android - 文件读写操作 总结
- C++中冒号,双冒号
- Hibernate处理hql语句封装参数Map集合查询
- K相邻和Kd tree
- 【ACM-Steps1.2】简单字符串处理、简单数学题、进制转换系列8题(二)
- DAG模型
- Linux内核启动过程中注册platform驱动模型
- RPC漏洞的通用分析方法
- CT-代码解释
- Flex中ParentDocument和parent的区别
- ecshop后台通过ajax搜索原理
- 删除svn目录内.svn目录及内容的方法汇总
- 爲什麽 Android手机會取消硬件後退和菜單按鈕
- 关于异常的问题