此题大意是说给你N根木头的长度和重量,制作第一根木头时需要一分钟,以后每根木头的长度和重量只要都比前一根大就不需要建立时间,否则需要加一分钟,让你求最少时间。这是一道贪心题目,首先,将所有的木头按照长度从小到大排序,然后比较重量就可以了。可能你还有点迷糊,看一下代码你就明白了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct sa
{
int l;
int w;
}data[10000];
int cmp(sa a,sa b)
{
if(a.l!=b.l)
return a.l<b.l;
return a.w<b.w;
}
int z[10000];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int a=0;a<n;a++)
{
int t;
scanf("%d",&t);
for(int b=0;b<t;b++)
{
scanf("%d%d",&data[b].l,&data[b].w);
}
sort(data,data+t,cmp);
memset(z,0,sizeof(z));
int x=0,y=0,i=0,j=0,time=0,k=0;
while(k<t)
{
for(i=j;i<t;i++)
if(z[i]==0)
{
z[i]=1;
j=i+1;
x=data[i].l;
y=data[i].w;
k++;
break;
}
for(i=j;i<t;i++)
{
if(z[i]==0&&x<=data[i].l&&y<=data[i].w)
{
z[i]=1;
x=data[i].l;
y=data[i].w;
k++;
}
}
time++;
}
printf("%d\n",time);
}
}
}