题目大意:要加n根重量长度分别为w,l的木棒,当下一根的长度和重量均不大于上一根时,机器不要重启,否则要花1分钟重启才能加工,求加工完这堆木棒所需的最短时间
思路:先对w降序排序(也可是l),w相同时当再对l降序排,这样就使得长度和重量较大的排在了前面,然后一次循环将长度依次递减的放到一起加工
#include<iostream>
#include<algorithm>
using namespace std;
struct q{
int l,w;
}A[5010];
bool cmp(q a,q b){ //降序比较函数
if(a.l!=b.l) return a.l>b.l;
else return a.w>b.w;
}
int main(){
int t,n,sum,min,i,j;
cin>>t;
while(t--){
cin>>n;
for(i=1;i<=n;i++) cin>>A[i].l>>A[i].w;
sort(A+1,A+n+1,cmp);
sum=0;
for(i=1;i<=n;i++){
if(A[i].w!=-1){ //-1表示已用过
sum++;
min=A[i].w;
for(j=i+1;j<=n;j++){ //依次求能加工的木棒,即重量不比上一根大,用min记录,加工过改为-1
if(A[j].w<=min&&A[j].w!=-1){
min=A[j].w;
A[j].w=-1;
}
}
}
}
cout<<sum<<endl;
}
return 0;
}