此题的排序是先后按长度l,重量w排序的,以长度l为首要考虑。
#include <stdio.h>
#include <string.h>
int mark[5010];//标记元素是否扫描过。
struct sticks
{
int l,w;
}stick[5010],change;
int main()
{
int T,i,n,left,lw,sum,j;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d %d",&stick[i].l,&stick[i].w);
for(i=0;i<5010;i++)
mark[i]=0;
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(stick[j].l>stick[j+1].l)
{
change=stick[j];
stick[j]=stick[j+1];
stick[j+1]=change;
}
else if(stick[j].l==stick[j+1].l)
{
if(stick[j].w>stick[j+1].w)
{
change=stick[j];
stick[j]=stick[j+1];
stick[j+1]=change;
}
}
}
}
left=0;
sum=0;
while(left<n)
{
while(mark[left])
{
left++;
continue;
}
if(left==n)
break;
mark[left]=1;
lw=stick[left].w;
for(i=left+1;i<n;i++)
{
if(!mark[i]&&stick[i].w>=lw)
{
mark[i]=1;
lw=stick[i].w;
}
}
sum++;
left++;
}
printf("%d/n",sum);
}
return 0;
}