题目大意
如果长度,重量都小于第二根的长度,重量,则第二根不需要花费时间
排序时注意长度相等和不相等两种情况
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct wooden{
int len;
int weight;
}a[5010];
int flag[5010];
int cmp(wooden a, wooden b){
if(a.len != b.len)
return a.len < b.len; //按长度从小到大排序
else
return a.weight < b.weight;
}
int main(){
int t, n, ans, i;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
memset(a, 0, sizeof(a));
memset(flag, 0, sizeof(flag));
for(i = 0; i < n; i++){
scanf("%d%d", &a[i].len, &a[i].weight);
}
ans = 0;
sort(a, a+n, cmp);
int tr = 0;
for(i = 0; i < n; i++){
if(flag[i] == 0){
int tr = a[i].weight;
flag[i] = 1;
ans++;
for(int j = i+1; j < n; j++){ //如果后一位比前一位重,就继续,说明不用再花费时间,并标记用过了
if(a[j].weight >= tr && flag[j] == 0){
tr = a[j].weight;
flag[j] = 1;
}
}
}
}
printf("%d\n", ans);
}
return 0;
}