【题意】
有n根木棒,已知他们的质量和长度,需对他们进行加工,开机1分钟,加工一根一分钟,
且每次开机后,加工的第i+1根必须比第i根的长度和质量都要大才行,问最短加工时间。
【输入】
第一行T表示T组数据。
每组数据第一行一个N,表示几根木棒。
然后N个二元组,表示每根木棒的长度与质量。
【输出】
对于每组数据,输出最短加工时间。
思路:
按照长度小到大排序,长度相等则按照重量小到大排序,先找第一次能加工的序列,然后以这个为标准继续找,直到找不到,这就是第一次加工
继续这样直到全部加工
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct wood
{
int len;
int wight;
int flag ;
}w[10005];
bool cmp(wood a,wood b)
{
if(a.len == b.len)
return a.wight < b.wight;
else
return a.len < b.len;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int m;
scanf("%d",&m);
for(int i = 0; i < m; i++)
{
scanf("%d%d",&w[i].len,&w[i].wight);
w[i].flag = 0;
}
sort(w,w+m,cmp);
int sum = 0,count = 0;
for(int i = 0; i < m; i++)
{
if(w[i].flag == 0)
{
int k = i;
sum++;w[i].flag = 1;//加工过的做标记
for(int j = i+1;j < m ; j++)
{
if(!w[j].flag &&w[k].wight <= w[j].wight)//找能加工的并且没有用过的加工
{
k = j;//
w[j].flag = 1;
}
}
}
}
printf("%d\n",sum);
}
return 0;
}