Problem Descriptionthere is a pile of n wooden sticks. The length and weight of each stick is known in advance. The sticks is processed by a woodworking machine in one by one fashion. It needs some time, called setup time, for the machine to prepare processing a stick. The setup times is associated with cleaning operations and changing tools and shapes. The setup times of the woodworking machine is given as follows:
(a) The setup time for the first wooden stick is 1 minute.
(b) Right after processing a stick of length L and weight W, the machine would need no setup time for a stick of length l ' and weight W ' if l<=l ' and W<=w '. Otherwise, it'll need 1 minute for setup.
You is to find the minimum setup time to process a given pile of n wooden sticks. For example, if you have five sticks whose pairs of length and weight is (4,9), (5,2), (2,1), (3,5), and (1,4), then the Minimum setup time should be 2 minutes since there are a sequence of pairs (1,4), (3,5), (4,9), (2,1), (5,2).
Inputthe input consists of T test cases. The number of test cases (T) is given on the first line of the input file. Each test case consists of a lines:the first line has a integer n, 1<=n<=5000, that represents the number of Wo Oden sticks in the test case, and the second line contains n 2 positive integers L1, W1, L2, W2, ..., LN, WN, each of Magn Itude at most 10000, where Li and wi is the length and weight of the i th wooden stick, respectively. The 2n integers is delimited by one or more spaces.
Outputthe output should contain the minimum setup time in minutes, one per line.
Sample INPUT3 5 4 9 5 2 2 1 3 5 1 4 3 2 2 1 1 2 2 3 1 3 2 2 3 1
Sample Output213
1#include <iostream>2#include <algorithm>3#include <cstring>4#include <stdio.h>5#include <math.h>6 using namespacestd;7 structSA8 {9 intx;Ten inty; One intFlag; A}data[10005]; - intcmpConstSA &a,ConstSA &b) - { the if(a.x!=b.x) - returna.x<b.x; - Else - returna.y<b.y; + } - intMain () + { A intN,M,ANS,TMP1,TMP2; at while(cin>>N) - { - while(n--) - { -Cin>>m; - for(intI=0; i<m;i++) in { -Cin>>data[i].x>>data[i].y; todata[i].flag=0; + } -Sort (data,data+m,cmp); theans=0; * for(intI=0; i<m;i++) $ {Panax Notoginseng if(data[i].flag!=1) - { theans++; +tmp1=data[i].x;tmp2=data[i].y;data[i].flag=1; A for(intj=i+1; j<m;j++) the if(data[j].x>=tmp1&&data[j].y>=tmp2&&data[j].flag==0) + { -tmp1=data[j].x;tmp2=data[j].y;data[j].flag=1; $ } $ } - } -cout<<ans<<Endl; the } - }Wuyi return 0; the}
View Code
Classic greedy question
1051 wooden sticks (greedy-3)