HDOJ1051-Wooden Sticks(贪心)

Problem 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

Means:

n对数据,每对包括木棍的长跟质量,只有当一组中木棍的长跟质量都大于这组前一个就可以,问你最少可以分成几组

Solve:

按照长排序,长相同的按照质量排序,然后对于符合条件的连续几个归类到一组就好了

Code:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define CLR(x , v)  memset(x , v , sizeof(x))
 4 static const int MAXN = 5e3 + 10;
 5 struct Node
 6 {
 7     int x , y;
 8 };
 9
10 Node data[MAXN];
11 bool vis[MAXN];
12 int n;
13 bool cmp(Node a , Node b)
14 {
15     return a.x == b.x ? a.y < b.y : a.x < b.x;
16 }
17 int main()
18 {
19     int t;
20     scanf("%d" , &t);
21     while(t--)
22     {
23         scanf("%d" , &n);
24         CLR(data , 0);CLR(vis , 0);
25         for(int i = 1 ; i <= n ; ++i)
26         {
27             scanf("%d%d" , &data[i].x , &data[i].y);
28         }
29
30         sort(data + 1 , data + 1 + n , cmp);
31         int ans = 0;
32         int mx = 0;
33         for(int i = 1 ; i <= n ; ++i)
34         {
35             if(vis[i])
36                 continue;
37             ++ans;
38             mx = data[i].y;
39             vis[i] = 1;
40             for(int j = i + 1 ; j <= n ; ++j)
41             {
42                 if(!vis[j] && data[j].y >= mx)
43                 {
44                     vis[j] = 1;
45                     mx = data[j].y;
46                 }
47             }
48         }
49
50         printf("%d\n" , ans);
51     }
52 }

时间: 2024-10-05 03:34:24

HDOJ1051-Wooden Sticks(贪心)的相关文章

HDU 1051 Wooden Sticks (贪心)

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11249    Accepted Submission(s): 4629 Problem Description There is a pile of n wooden sticks. The length and weight of each stick a

ZOJ 1025. Wooden Sticks 贪心 结构体排序

Wooden Sticks Time Limit: 2 Seconds      Memory Limit: 65536 KB 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

HDOJ 1051. Wooden Sticks 贪心 结构体排序

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15564    Accepted Submission(s): 6405 Problem Description There is a pile of n wooden sticks. The length and weight of each stick a

SPOJ MSTICK. Wooden Sticks 贪心 结构体排序

MSTICK - Wooden Sticks 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

POJ 1065. Wooden Sticks 贪心 结构体排序

Wooden Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19992   Accepted: 8431 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 woodworkin

HDU 1051 Wooden Sticks 贪心||DP

Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22000    Accepted Submission(s): 8851 Problem Description There is a pile of n wooden sticks. The length and weight of each stick ar

HDU Wooden Sticks (贪心)

Wooden Sticks Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 19   Accepted Submission(s) : 7 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description There is a pile of n woo

Wooden Sticks(贪心)

Wooden Sticks. win the wooden spoon:成为末名. 题目地址:http://poj.org/problem?id=1065 There is a pile of n wooden sticks. a woodworking machine:木工机器. setup time:启动时间. my codes: #include<iostream> #include<cstdio> #include<cstring> #include<al

poj 1065 Wooden Sticks 贪心

题目链接:http://poj.org/problem?id=1065 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1051 贪心 先按l升序再按w稳定升序 然后从头扫到尾取可以取的 然后再从头 直到全部取完 一年前第一次写这道题的时候写了两百行Orz 其中有70行归并排序自己手敲 刚刚翻看老代码真是感慨... #include <cstdio> #include <cstdlib> #include <ctime> #

POJ 1065 Wooden Sticks#贪心+qsort用法

(- ̄▽ ̄)-* 这道题用到了cstdlib库的qsort()函数: 用法链接:http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> using namespace std; struct s