• 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
     
    翻译一下题目:
    现有n根木棒,已知它们的长度和重量。要用一部木工机一根一根地加工这些木棒。该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模板的。木工机需要的准备时间如下:
    (1)第一根木棒需要1min的准备时间;
    (2)在加工了一根长为l,重为w的木棒之后,接着加工一根长为ll(l<=ll),重为ww(w<=ww)的木棒是不需要任何准备时间的。否则需要一分钟的准备时间。
    给定n根木棒,你要找到最少的准备时间。例如现在有长和重分别为(4,9),(5,2),(2,1),(3,5)和(1,4)的五根木棒,那么所需准备时间最少为2min,顺序为(1,4),(3,5),(4,9),(2,1),(5,2)。
     
    简单的贪心,只需要不停的扫描这n个木棍,符合条件就继续往后扫,已经比过的直接跳过,到最后没了时间就+1,然后再从头扫描,用一个cnt来计数,循环结束的条件是cnt==n。  注意一定要先排序!!
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 #include <algorithm>       //sort函数所需头文件
     5 using namespace std;
     6 
     7 struct stick
     8 {
     9     int l,w;       //长度和重量
    10     int v;        //用于标记木棒是否被处理
    11 }s[5500];
    12 
    13 int cmp(const stick &a,const stick &b)
    14 {
    15     if(a.l==b.l)
    16         return a.w<b.w;
    17     return a.l<b.l;
    18 }              //定义排序原则
    19 
    20 int main()
    21 {
    22     int i,t,k,n,cnt,ans;       //cnt表示被标记元素的个数(如果元素全部被标记cnt=n说明他们都找到了其升序子序列),ans为准备时间
    23     scanf("%d",&t);
    24     while(t--)
    25     {
    26         scanf("%d",&n);
    27         for(i=0;i<n;i++)
    28         {
    29             scanf("%d%d",&s[i].l,&s[i].w);
    30             s[i].v=0;     //初始标记为0
    31         }
    32         sort(s,s+n,cmp);
    33         cnt=0;
    34         k=0;
    35         ans=0;
    36         while(cnt!=n)
    37         {
    38             k=0;
    39             while(k<n&&s[k].v==1)     //依次遍历到上次循环找到的升序子序列 直到不满足条件的第一个元素
    40                 k++;
    41             ans++;           //准备时间要+1
    42             for(i=k;i<n;i++)           //找出一个从k开始的升序子序列 并标记为1
    43             {
    44                 if(s[i].v==0&&s[i].l>=s[k].l&&s[i].w>=s[k].w)   //之前找过的已经标记为1了,所以不可以再次使用
    45                 {
    46                     s[i].v=1;
    47                     cnt++;    //记录标记元素的个数
    48                     k=i;      //k指向当前处理的木棒
    49                 }
    50             }
    51         }
    52         printf("%d
    ",ans);
    53     }
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    data* H5新特性
    网页系统暗色模式的 W3C 新规范:preferscolorscheme
    pc网页布局简单整理
    [导入] 精彩网站新世界
    单一职责原则SRP(SingleResponsibility Principle)
    WebEx 创始人朱敏做企业家的七个理论(非常实用)
    最近找了些在Win32环境下调用ASP.NET编写的Web Service的例子。
    从SQL Server中读写大数据列。
    开放-封闭原则OCP(OpenClose Principle)
    一个求连数的小测试程序
  • 原文地址:https://www.cnblogs.com/to-creat/p/4933544.html
Copyright © 2020-2023  润新知