poj 1065 Wooden Sticks
#include <iostream>
using namespace std;
struct wood
{
int w;
int l;
}Wood[5000];
int cmp(const void *a,const void *b)
{
if((*(wood*)a).l==(*(wood*)b).l) //不能写成(wood*)a->l,要写成(*(wood*)a).l
return (*(wood*)a).w-(*(wood*)b).w;
return (*(wood*)a).l-(*(wood*)b).l;
}
//按木棍的长度从小到大排序,当木棍长度相等时,按重量小到大排序。这样每次选择都是对后面影响最小的
//对选过的木棍进行标记。一轮之后,setup time+1,再对剩下的木棍进行选择,即可得到最优解。
int machine(int n)
{
int sum=0;
for(int i=0;i<n;i++)
if(Wood[i].w!=-1)
{
sum++;
int tmp=Wood[i].w;
for(int j=i+1;j<n;j++)
if(tmp<=Wood[j].w)
{
tmp=Wood[j].w;
Wood[j].w=-1; //对选过的木棍进行标记。
}
}
return sum;
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i=0;i<n;i++)
cin>>Wood[i].w>>Wood[i].l;
qsort(Wood,n,sizeof(Wood[0]),cmp);
cout<<machine(n)<<endl;
}
return 0;
}