原题大意:
第一个木棍计时1,接下来的如果满足了l<='l w<='w,就不计时,找出最少的时间。
只要找出最多的不花时的序列,就行了。
这里用贪心算法,要多贪心有多贪心,就是这样,不过比较两个就必须保持一个满足,然后比较另一个。
这样我们就必须构造一个升序序列;
代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct stick
{
int l;int w;
}sticks;
int cmp(const void *a,const void *b)
{
if((*(sticks *)a).l==(*(sticks *)b).l)
return (*(sticks *)a).w-(*(sticks *)b).w;
else return (*(sticks *)a).l-(*(sticks *)b).l;
}
int main()
{
sticks p[5000];
int n,i,j,temp;
scanf("%d",&n);
while(n--)
{
int count;scanf("%d",&count);
for(i=0;i<count;i++)
scanf("%d%d",&p[i].l,&p[i].w);
qsort(p,count,sizeof(sticks),cmp);
int js=0;for(i=0;i<count;i++)
{
if(p[i].w!=0)
{
temp=p[i].w;js++;
for(j=i+1;j<count;j++)if(p[j].w>=temp){
temp=p[j].w;
p[j].w=0;
}
}
}
printf("%d\n",js);
}
return 0;
}
注意:木棍长为0可没有意义,如果你的代码将结果正确但是aw。可能你没住意没有意义的0;