Wooden sticks
Time Limit: 2000/1000 MS (Java/others) memory limit: 65536/32768 K (Java/Others)
Total submission (s): 12157 accepted submission (s): 5036
Problem descriptionthere is a pile of N wooden sticks. the length and weight of each stick are known in advance. the sticks are to be 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 are associated with cleaning operations and changing tools and shapes in the machine. the setup times of the woodworking machine are 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 will need no setup time for a stick of length l' and weight W' if l <= l' and W <= W '. otherwise, it will need 1 minute for setup.
You are 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 are (), and ), then the minimum setup time shocould be 2 minutes since there is a sequence of pairs ).
Inputthe input consists of T test cases. the number of test cases (t) is given in the first line of the input file. each test case consists of two lines: the first line has an integer N, 1 <= n <= 5000, that represents the number of wooden sticks in the test case, and the second line contains N 2 positive integers L1, W1, L2, W2 ,..., ln, Wn, each of magnloud at most 10000, where Li and WI are the length and weight of the I th wooden stick, respectively. the 2n integers are delimited by one or more spaces.
Outputthe output shoshould 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 <string. h ># include <algorithm> using namespace STD; struct st {int L, W;} data [10050]; int CMP (st a, St B) // sort by wood length in ascending order. If the length is the same, sort by quality in ascending order. {If (A. L! = B. l) return. l> B. l; elsereturn. w> B. w;} int A [10050]; int main () {int t; scanf ("% d", & T); While (t --) {int I, j, n, K, sum = 0; scanf ("% d", & N); for (I = 0; I <n; I ++) {scanf ("% d", & Data [I]. l, & Data [I]. w);} Sort (data, data + N, CMP); memset (A, 0, sizeof (a); for (I = 0; I <N; I ++) // mark the traversed wood that meets the conditions, and use sum to count the number of times required. {If (a [I]) continue; k = data [I]. w; For (j = I + 1; j <n; j ++) {If (k> = data [J]. W &&! A [J]) {k = data [J]. w; A [J] = 1 ;}} sum ++;} printf ("% d \ n", sum );}}
Wooden sticks (Hangzhou power 1051)