杭电acm吧 关注:271贴子:292
  • 0回复贴,共1

【南阳理工OJ】题目16--矩形嵌套--【动态规划简单题目】

只看楼主收藏回复

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
void swap(int &x,int &y)
{
int t = x;
x = y;
y = t;
}
struct Ang
{
int x,y;
int n;
Ang():n(1){}//赋初值
};
bool comp(Ang a,Ang b)//对x进行从小到大排列
{
if(a.x == b.x)
{
return a.y < b.y;
}
return a.x < b.x;
}
int main()
{
vector<Ang> v;
int i,j;
Ang ang;
int m,n;
cin>>m;
while(m--)
{
cin>>n;
while(n--)
{
cin>>ang.x>>ang.y;
if(ang.x > ang.y)swap(ang.x , ang.y);
v.push_back(ang);
}
//排序
sort(v.begin(),v.end(),comp);
//动态规划
for(i=0; i<v.size(); i++)
{
for(j=i+1; j<v.size(); j++)
{
//后者的x,y都大于前者的,且规划后的n要变大
if(v[j].y > v[i].y && v[j].x > v[i].x && v[i].n >= v[j].n)
{
v[j].n = v[i].n + 1;
}
}
}
for(i=1; i<v.size(); i++)
{
if(v[i].n > v[0].n)
{
swap(v[i].n , v[0].n);
}
}
cout<<v[0].n<<endl;
v.clear();//清除向量里的内容,必要!
}
return 0;
}


IP属地:北京1楼2013-04-21 15:43回复