zoukankan      html  css  js  c++  java
  • HDOJ 1051. 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根木棍。每个棒的长度和重量是预先已知的。这些木棒将由木工机械一一加工。机器需要准备一些时间(称为准备时间)来准备处理木棍。设置时间与清洁操作以及更换机器中的工具和形状有关。木工机械的准备时间如下: 
      (a)第一个木棍的准备时间为1分钟。
      (b)在处理长度为l和重量为w的棒之后,如果l <= l'并且w <= w',则机器将不需要设置长度为l'和重量为w'的棒的设置时间。否则,将需要1分钟进行设置。
    您将找到处理给定的n根木棍的最短准备时间。例如,如果您有五根长度和重量对分别为(9,4),(2,5),(1、2),(5、3)和(4,1)的摇杆,则最小设置时间应该是2分钟,因为有对(4,1),(5,3),(9,4),(1,2),(2,5)对的序列。

    输入值

    输入包含T个测试用例。在输入文件的第一行中给出了测试用例的数量(T)。每个测试用例由两行组成:第一行具有整数n,1 <= n <= 5000,代表测试例中木棍的数量,第二行包含2n个正整数l1,w1,l2, w2,...,ln,wn,每个大小最大为10000,其中li和wi分别是第i个木棍的长度和重量。2n个整数由一个或多个空格分隔。

    输出量

    输出应包含以分钟为单位的最短建立时间,每行一条。

    样本输入

    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 
    

    样本输出

    2

    1

    3

    作者描述
    其实这道题和友好城市(https://www.luogu.com.cn/problem/P2782)有类似的地方
    我们只需要借助结构体......就可以了
    这道题没什么好说的,直接上代码
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N=5010;
    struct Node{
        int l,w;
    }e[N];
    int n,T;
    int f[N];
    
    bool cmp(Node A,Node B){
        if(A.l==B.l)return A.w<B.w;
        else return A.l<B.l;
    }
    
    int main(){
        scanf("%d",&T);
        while(T--){
            memset(f,0,sizeof(f));
            memset(e,0,sizeof(e));
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%d%d",&e[i].l,&e[i].w);
            }
            
            sort(e+1,e+1+n,cmp);int ans=1;
            for(int i=1;i<=n;i++){
                f[i]=1;
                for(int j=1;j<i;j++){
                    if(e[i].w<e[j].w&&f[i]<f[j]+1){
                        f[i]=f[j]+1;
                        ans=max(ans,f[i]);
                    }
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
     
  • 相关阅读:
    01-JAVA语言基础(动手动脑)
    大道至简第一章JAVA伪代码形式读后感
    《美国教授写给被开除中国留学生的信》阅读笔记
    《大道至简》读后感
    使用java2Word生成Word文档打不开报错 存在非法字符xml
    继上篇博客对安卓爬虫以及TextView更新的问题解释
    安卓Jsoup爬虫
    AndroidStdio模拟器打不开报错 Guest isn't online after 7 seconds
    MapReduce
    水晶报表报错:log4net初始值问题
  • 原文地址:https://www.cnblogs.com/LightyaChoo/p/12657046.html
Copyright © 2011-2022 走看看