题意:一个切木头机器,开始需要预热一分钟,然后开始切木头,如果后一块切得木头的长和宽都大于前一块,那么机器不需要预热直接切,问机器切完所有木头需要预热几分钟。
类似于防御导弹的那个贪心,不过变成二维,还需要先排序。
大牛说的对,脑洞大开的时候就是需要贪心题目切的最顺溜的时候。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
int x,y;
};
int cmp(const void *a,const void *b)
{
if((*(node*)a).x==(*(node*)b).x)
return (*(node*)a).y-(*(node*)b).y;
return (*(node*)a).x-(*(node*)b).x;
}
int main()
{
int T;
node s[5050],x[5050];
scanf("%d",&T);
while(T--)
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d %d",&s[i].x,&s[i].y);
int k=0;
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
if(x[j].x<=s[i].x&&x[j].y<=s[i].y)
{
x[j].x=s[i].x;
x[j].y=s[i].y;
break;
}
}
if(j==k)
{
x[k].x=s[i].x;
x[k].y=s[i].y;
k++;
}
}
printf("%d\n",k);
}
return 0;
}