题目描述

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. windows7安装oracle 10g

    1.出现如下错误 解决办法: ①确保你有该文件夹的完全控制权.文件夹点右键->属性->安全->高级->所有者->改为自己->编辑自己的权限为完全控制. ②将setu ...

  2. java 利用SMB读取远程文件

    package  com.yss.test.FileReadWriter; import  java.io.BufferedInputStream; import  java.io.BufferedO ...

  3. jni中的参数含义

    #include <jni.h> JNIEXPORT jstring JNICALL Java_com_example_hellojni_MainActivity_helloFromC ( ...

  4. junit 单元测试 - 参数化测试

    junit4.x版本需要引入如下jar包: hamcrest-core-1.3.jar junit-4.12-beta-3.jar 新建一个计算器类,如下: package com.pt; publi ...

  5. JSP简单标签标签库开发

    1.定制标签的实现类称为标签处理器,简单标签处理器指实现SimpleTag接口的类,如下图的SimpleTagSupport类,该类为SimpleTag接口的默认实现类. 注:不要直接实现Simple ...

  6. How To Install Apache Kafka on Ubuntu 14.04

    打算学习kafka ,接触一些新的知识.加油!!! 参考:https://www.digitalocean.com/community/tutorials/how-to-install-apache- ...

  7. 【转】How to build and install PHP 5.6.9 from source on Ubuntu 14.04 VPS

    原文 https://vpsineu.com/blog/how-to-build-and-install-php-5-6-9-from-source-on-ubuntu-14-04-vps/ In t ...

  8. ios开发使用lipo命令合并真机库和模拟器库

    在开发ios时,我们经常会遇到编译两套库文件,使用模拟器时链接模拟器库,使用真机时使用真机库,这样操作会对后期的维护带来麻烦,所以Apple提供了一个把多个不同平台的.a库文件合并成一个适用于多平台的 ...

  9. hdu 5344 MZL's xor

    MZL's xor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  10. ReactiveCocoa 用法实例

      我个人非常推崇ReactiveCocoa,它就像中国的太极,太极生两仪,两仪生四象,四象生八卦,八卦生万物.ReactiveCocoa是一个高度抽象的编程框架,它真的很抽象,初看你不知道它是要干嘛 ...