NYOJ 16 矩形嵌套(动态规划)
来源:互联网 发布:自动开关机软件 编辑:程序博客网 时间:2024/06/05 20:24
描述
有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。
输入
第一行是一个正正数N(0<N<10),表示测试数据组数,
每组测试数据的第一行是一个正正数n,表示该组测试数据中含有矩形的个数(n<=1000)
随后的n行,每行有两个数a,b(0<a,b<100),表示矩形的长和宽输出
每组测试数据都输出一个数,表示最多符合条件的矩形数目,每组输出占一行
样例输入
1101 22 45 86 107 93 15 812 109 72 2
样例输出
5
#include<iostream>#include<algorithm> using namespace std; //矩形结构,包含 长、宽typedef struct{ int a; int b;}nRectangle; //声明矩形数组nRectangle r[1000]; //交换矩形的长、宽void Swap(int *a, int *b){ *a=*a^*b; *b=*a^*b; *a=*a^*b;} //cmpbool cmp(nRectangle c1, nRectangle c2){ if(c1.a < c2.a) return true; if(c1.a==c2.a && c1.b <= c2.b) return true; return false;} int main(){ int n,m,i,j,max,count; int dp[1000]={0}; cin>>n; while(n--) { count = 1; cin>>m; //输入m个初始矩形长、宽 for(i=0;i<m;i++) { cin>>r[i].a>>r[i].b; if(r[i].a<r[i].b) Swap(&r[i].a,&r[i].b); } sort(r,r+m,cmp); dp[0]=1; for(i=1;i<m;i++) { max=0; for(j=i-1;j>=0;j--) if(r[i].a>r[j].a && r[i].b>r[j].b) if(max < dp[j]) max=dp[j]; dp[i]=max+1; if(count<dp[i]) count=dp[i]; } cout<<count<<endl; } return 0;}
1 0
- NYOJ 16 矩形嵌套(动态规划)
- NYOJ 16 矩形嵌套(动态规划)
- NYOJ-16-矩形嵌套(动态规划)
- 【矩形嵌套 16 动态规划 NYOJ】
- NYOJ-16 矩形嵌套 动态规划
- nyoj--16--矩形嵌套(动态规划)
- NYOJ 16 (动态规划之嵌套矩形)
- nyoj 16 嵌套矩形(DAG上的动态规划)
- NYOJ 16 矩形嵌套(动态规划 or 贪心)
- NYoj 16 矩形嵌套[经典动态规划1]
- nyoj-16-动态规划之最长路-嵌套矩形
- nyoj 16 矩形嵌套 (DAG上的动态规划)
- nyoj 16 BTOJ 1025: 矩形嵌套问题 【动态规划】
- NYOJ - 16 - 矩形嵌套(DAG最长路,动态规划)
- NYOJ 16 矩形嵌套(DAG上的动态规划)
- 矩形嵌套(动态规划)
- 嵌套矩形 动态规划
- [DAG上的动态规划]NYOJ 矩形嵌套
- sharepoint 2013 设置 显示详细错误信息
- Mobile data offloading
- WCF DataContract and DataMember
- Node.js C++扩展实现
- 几种C++ std::string和std::wstring相互转换的转换方法
- NYOJ 16 矩形嵌套(动态规划)
- Newtonsoft.Json与datatables.net的使用 完美分页
- 使用自签SSL证书有什么风险?
- 配置MM模块material management几个常见的错误
- 路径搜索问题
- VLC4Android源码分析
- Altium designer10---PCB添加Logo
- 奔五的人学iOS:用swift实现获取拼音首字母,支持取一句话中每字拼音首字母
- SharePoint 2013 迁移内容数据库最简单的配置方法