/*
HDOJ 1051
在长度不相等的情况下,就按长度降序排序,
长度相等的情况下,就按重量降序排序。
接下来的,就是每次尽可能多的找出符合题意的数据,并将已经归类的数据置为已访问
*/
#include <iostream>
#include <algorithm>
using namespace std;
struct Stick
{
int l; //length
int w; //weight
int flag; // is visited?
};
bool cmp(const Stick &a,const Stick &b)
{
if(a.l != b.l)
return (a.l >= b.l);
else
return (a.w >= b.w);
}
int main()
{
int T,n,i,j,time;
Stick sk[5000],pre;
cin>>T;
while(T--)
{
cin>>n;
for(i=0;i<n;i++)
{
cin>>sk[i].l>>sk[i].w;
sk[i].flag=0;
}
sort(sk,sk+n,cmp);
time=0;
for(i=0;i<n;i++)
{
if(sk[i].flag == 0)
{
sk[i].flag=1;
pre=sk[i];
for(j=i+1;j<n;j++)
{
if( (sk[j].flag == 0) && (sk[j].w <= pre.w) )
{
sk[j].flag=1;
pre=sk[j];
}
}
time++;
}
}
cout<<time<<endl;
}
return 0;
}
Greedy——HDOJ 1051
最新推荐文章于 2019-02-19 22:26:47 发布