Wooden Sticks

依然和前几个一样作为最简单的贪心,不在多说


注意第二条是标准在一直都改变...

#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct T{
	int length,weight;
}a[5010];

bool cmp(T a,T b){
	if(a.length!=b.length)
	 return a.length<b.length;
	return a.weight<b.weight;
}
int main (){	
	int Case,temp;
	scanf("%d ",&Case);
	while(Case--){
	    int mark[5010]={0};
        int n,sum=0;
        scanf("%d",&n);
	    for(int i=0;i<n;i++) 
		  	scanf("%d%d",&a[i].length,&a[i].weight);
	   sort(a,a+n,cmp);	
	   int j=n,now=0;
	   while(n>0){
	       for(int i=now;;i++) 
		      if(mark[i]==0) {
			   now=i;
			   n--;
			   mark[i]=1; 
			   break;
			  }
			  int temp=now;
	       for(int i=now+1;i<j;i++)
            	if( a[i].length>=a[now].length && a[i].weight>=a[now].weight && mark[i]==0 )
				  mark[i]=1,n--,now=i;   //注意now的不断调整
		   sum++;
		   now=temp;
		 }
	     printf("%d\n",sum);
	}
	return 0;
}

你可能感兴趣的:(Wooden Sticks)