题目描述

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 Output

2
1
3

题目大意

将n根木头放入一台机器加工,若要放的木头的长度与宽度都分别大于或等于上一根的长度与宽度,则需要调整机器。第一根放之前也需要调整机器。求需要调整几次

大致思路

贪心问题。贪心标准为一次调整加工的木头尽可能的多。因此需要第一根木头尽可能的小,然后找出所有与它相容的木头。所求调整次数即为最优解。

下面的代码使用了数组(使用容器会方便一些,当时有些偷懒。。。。)先由小到大sort,从第一个开始,每当找到上一个相容的即从数组中除去(重新赋值为-1,使数据无效)寻找到最末,然后从下一个有效数据开始重复以上过程,知道数组中全为无效数据,执行此过程的次数即为解。

AC代码

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<stdio.h>
  4. using namespace std;
  5. struct woods
  6. {
  7. int l;
  8. int w;
  9. }a[5000];
  10. bool cmp(woods a, woods b)
  11. {
  12. if (a.l < b.l)
  13. return 1;
  14. else if (a.l == b.l)
  15. {
  16. if (a.w < b.w)
  17. return 1;
  18. }
  19. return 0;
  20. }
  21. int main()
  22. {
  23. //freopen("date.in", "r", stdin);
  24. //freopen("date.out", "w", stdout);
  25. int N,m,sum,flag,count;
  26. cin >> N;
  27. woods tem;
  28. for (int i = 0; i < N; i++)
  29. {
  30. sum = 0;
  31. flag = 1;
  32. cin >> m;
  33. for (int j = 0; j < m; j++)
  34. {
  35. cin >> a[j].l >>a[j].w;
  36. }
  37. sort(a, a+m, cmp);
  38. /*for (int l = 0; l < m; l++)
  39. {
  40. cout << a[l].l << " " << a[l].w << endl;
  41. }*/
  42. for (int k = 0; k < m ; k++)
  43. {
  44. //count = 0;
  45. tem.l = a[k].l;
  46. tem.w = a[k].w;
  47. if (a[k].l != -1)
  48. {
  49. sum++;
  50. for (int l = k; l < m; l++)
  51. {
  52. if (a[l].l >= tem.l&&a[l].w >= tem.w)
  53. {
  54. tem.l = a[l].l;
  55. tem.w = a[l].w;
  56. a[l].l = -1;
  57. a[l].w = -1;
  58. //count++;
  59. }
  60. }
  61. }
  62. }
  63. cout << sum<<endl;
  64. }
  65. }

SDAU课程练习--problemB(1001)的更多相关文章

  1. SDAU课程练习--problemQ(1016)

    题目描述 FJ is surveying his herd to find the most average cow. He wants to know how much milk this 'med ...

  2. SDAU课程练习--problemG(1006)

    题目描述 Problem Description The highest building in our city has only one elevator. A request list is m ...

  3. SDAU课程练习--problemO(1014)

    题目描述 Before bridges were common, ferries were used to transport cars across rivers. River ferries, u ...

  4. SDAU课程练习--problemA(1000)

    题目描述 The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape i ...

  5. SDAU课程练习--problemC

    题目描述 Here is a famous story in Chinese history. "That was about 2300 years ago. General Tian Ji ...

  6. SDAU课程练习--problemE

    problemE 题目描述 "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋!" "@ ...

  7. 4、json-server的使用

    json-server 详解 转载于https://www.cnblogs.com/fly_dragon/p/9150732.html JSON-Server 是一个 Node 模块,运行 Expre ...

  8. 一分钟内搭建全web的API接口神器json-server详解

    JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源. 安装json-server npm install -g json ...

  9. json-server 详解

    JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源. 安装json-server npm install -g json ...

随机推荐

  1. array_walk与array_map 的不同 array_filter

      array_walk 主要是要对数组内的每个值进行操作,操作结果影响原来的数组 array_map主要是对数组中的值进行操作后返回数组,以得到一个新数组 wallk 可以没有返回值 map要有,因 ...

  2. mysql命令行操作 添加字段,修改字段

    alter table  t_apply   change column     remarks(原)    apply_remarks(目标)   varchar(100) default '' c ...

  3. sublime Text 常用操作

    原文出处:http://www.php100.com/html/it/focus/2014/1030/7666.html 1. 多光标操作:只要按下Cmd(Windows系统下Ctrl)键,再用鼠标选 ...

  4. 用tomcat6自定义域名

    第一步:tomcat配置 修改server.xml文件 8080端口 更改为 80端口 并在<Host name="localhost"  appBase="web ...

  5. uCOS-II的信号量及使用

    uCOS-II的信号量及使用 信号量的定义: OS_EVENT* Key1_SEM; OS_EVENT* Key2_SEM; OS_EVENT* Key3_SEM; 信号量的创建: Key1_SEM= ...

  6. 概率好题 Light OJ 1027

    题目大意:你在迷宫里,有n扇门,每个门有一个val,这个val可正可负,每次通过一扇门需要abs(x)分钟,如果这个门的val是正的,那么就直接出了迷宫,否则回到原地,问出去迷宫的期望是多少? 思路: ...

  7. MyBatis 返回新增数据的自增id

    <insert id="save" parameterType="Vote" useGeneratedKeys="true" keyP ...

  8. 命令行从Android手机中导出已安装APK的方法调研

    一.背景 二.步骤 一.背景 很多时候,APK文件只存在于应用市场,在PC上无法直接下载.用手机下载下来后就直接安装了,也不能保存原始的APK文件. APK安装到手机后,Android系统会保存一份和 ...

  9. ubuntu下安装nagios

    第一步安装apache root@root01-virtual-machine:/etc/apache2/conf-available# vi charset.conf 可修改apache服务器的编码 ...

  10. std::function 测试

    #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" typedef ...