Wooden Sticks(hdu1051)

 

Wooden Sticks

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status Practice _

Description

There 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 (4,9), (5,2), (2,1), (3,5), and (1,4), then the minimum setup time should be 2 minutes since there is a sequence of pairs (1,4), (3,5), (4,9), (2,1), (5,2). 

Input

The 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 magnitude 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. 

Output

The 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

2 1 3

//第一行是代表测试数据t
每组数据第一行是一个整数 n ,代表木头的数量
然后 n 对数据 代表 木头的长度,和重量

需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于

第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。

问最短时间

//贪心解决了

排个序,就行

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 struct Node
 7 {
 8     int l,w;
 9 }node[5005],setup[5005];
10 
11 bool cmp(Node a,Node b)
12 {
13     if (a.l==b.l)
14         return a.w<b.w;
15     return a.l<b.l;
16 }
17 
18 int main()
19 {
20     int t;
21     cin>>t;
22     while (t--)
23     {
24         int n;
25         int i,j;
26         cin>>n;
27         for (i=0;i<n;i++)
28         {
29             cin>>node[i].l>>node[i].w;
30         }
31         sort(node,node+n,cmp);
32         int ans=1;
33         setup[0].l=node[0].l;
34         setup[0].w=node[0].w;
35 
36         for (i=1;i<n;i++)
37         {
38             int ok=0;
39             for (j=0;j<ans;j++)
40             {
41                 if (setup[j].l<=node[i].l&&setup[j].w<=node[i].w)
42                 {
43                     setup[j].l=node[i].l;
44                     setup[j].w=node[i].w;
45                     ok=1;
46                     break;
47                 }
48             }
49             if (ok==0)
50             {
51                 setup[ans].l=node[i].l;
52                 setup[ans].w=node[i].w;
53                 ans++;
54             }
55         }
56         cout<<ans<<endl;
57     }
58     return 0;
59 }
View Code

 

原文地址:https://www.cnblogs.com/haoabcd2010/p/5964893.html