当排序之后就与最小拦截系统类似了,运用贪心算法 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node { int l,w; }wood; wood s[5005]; bool f[5005]; int num; int cmp_l(const void* _a,const void* _b) { wood *a=(wood *)_a; wood *b=(wood *)_b; if(a->l!=b->l)///当长度相同时,按照重量排序 return (a->l)-(b->l); else return a->w-b->w; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout);/// int cas; scanf("%d",&cas); while(cas--) { int n,i,j; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&s[i].l,&s[i].w); memset(f,0,sizeof(f)); qsort(&s[1],n,sizeof(s[1]),cmp_l);///按长度排序 int t=n,low; num=0; 查找最少时间 while(t) { low=-1; num++; for(i=1;i<=n;i++) { if(s[i].w>=low&&f[i]==0) { f[i]=1; low=s[i].w; t--; } } } printf("%d/n",num); } return 0; }