DAG模型
来源:互联网 发布:淘宝饰品店便宜 编辑:程序博客网 时间:2024/06/04 19:49
题目:
有N个矩形,每个矩形可以用两个整数a,b描述,表示它的长和宽。矩形X(a,b)可以嵌套在矩形Y(a,b)中当且仅当a<c,b<d,或b<c,a<d(相当于把矩形旋转九十度)
找出能够嵌套在一个里的最多数是多少?
这是DP的一种类型,与图,搜索也有些关系。
方法:1、用贪心算法,先是排序,这要的时间O(n*n)
2、用DP,先排序,在搜的时候记录深度,一但找到已经计算过该点就直接返回值。 O(n*n)
下面是DP的一点代码,自己试着写的,不知道算不算,
#include<iostream>#include<cstdio>#include<cstring> #include<ctype.h>#include<vector>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<string>#include<map>#include<stack>using namespace std; #define N 100struct my{int w,l;int d;}go[N];int num;int n;bool cmp(my a,my b){if (a.l!=b.l)return a.l<b.l;return a.w<b.w;}int dp(int k){num++;int i,j;if (go[k].d)return go[k].d;i=k+1;j=0;int w=go[k].w;for (;i<n;i++){if (w<go[i].w)j=max(1+dp(i),j);}go[k].d=j;if (go[k].d==0)go[k].d=1;return go[k].d;}int main(){freopen("fuck.txt","r",stdin);int i,j,k;while (cin>>n,n){for (i=0;i<n;i++){cin>>go[i].l>>go[i].w;if (go[i].l>go[i].w)swap(go[i].l,go[i].w);go[i].d=0;}sort(go,go+n,cmp);num=0;for (i=0;i<n;i++){cout<<go[i].l<<' '<<go[i].w<<endl;go[i].d=dp(i);}k=0;for (i=0;i<n;i++)k=max(k,go[i].d),cout<<go[i].d<<' ';cout<<endl;cout<<k<<endl;cout<<"times: "<<num<<endl;}return 0;}
- DAG模型
- DAG模型
- DAG模型 矩形嵌套
- DAG模型简单题
- DAG模型硬币问题
- DAG模型-嵌套矩阵
- dp(DAG模型)
- DAG模型的动态规划
- DAG 模型小讲 【 理解 + 例题 】
- NYOJ16 矩形嵌套 (DAG模型_dp)
- 嵌套模型(DAG上的动态规划
- 动态规划 DAG模型 硬币问题
- DAG模型—嵌套矩形问题
- DAG模型——硬币问题
- DAG模型的动态规划学习
- DP<DAG模型的最短路>
- DAG
- DAG
- CSRF verification failed. Request aborted.的解决办法
- Jdom解析XML文档
- date转换
- 结构体字节对齐
- 数据库设计的14种技巧
- DAG模型
- java swing中给面板或者文本域设置背景图片的方法!
- Java文件知识总结
- 为图片文件生成缩略图
- 程序中进程的读取、关闭
- java 自动提示框 自动消失和点击消失 渐变效果 .
- iOS开发 : Navigation Bar的简单设置
- jquery tmpl 模板
- AspNetPager分布控件的一些设置