Wooden SticksTime
limit:2000/1000 MS (java/others) Memory limit:65536/32768 K (java/others)
Total submission (s): 14126 Accepted Submission (s): 5842
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 Input
3 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 Output
213
#include <stdio.h> #include <algorithm>using namespace std;//1051 typedef struct node{int x,y,isused;} Node;int CMP (Node A, node B) {//if x is the same, sort by y in descending order if (a.x = = b.x) {return a.y>b.y; } else {return a.x>b.x; }}int Main () {int t,n; NODE c[5001]; while (scanf ("%d", &t)!=eof) {while (t--) {scanf ("%d", &n); for (int i=0; i<n; i++) {scanf ("%d%d", &c[i].x, &C[I].Y); c[i].isused = 0; } sort (c, c+n, CMP); int time = 0; for (int i=0; i<n; i++) {if (c[i].isused = = 1) continue; int x, y; x = c[i].x; y = c[i].y; The mark is currently used for c[i].isused = 1; for (int j=i+1; j<n; J + +) {if (c[j].x<=x && c[j].y<=y && c[j].isused = = 0) {x = c[j].x; y = c[j].y; c[j].isused = 1; }} time++; } printf ("%d\n", time); }} return 0;}
HDU 1051 wooden sticks (greedy)